Devices

如何將字元設備作為二進製文件打開和讀取?

  • May 21, 2021

我正在使用 USB,我想讀取 /dev/bus/usb/00x/00y 中的 USB 設備描述符的內容 - 它是一個字元設備。

我使用 fopen 將其作為帶有“rb”參數的二進製文件打開。但是當我進行搜尋並告訴獲取文件大小時,它返回的大小為 0 字節。有沒有辦法將它作為二進製文件讀取?

void ReadUsbDeviceDescriptor( const char* path )
{
   FILE* usb_fd = NULL;
   size_t lSize = 0;

   if ( path != NULL )
   {
       usb_fd = fopen ( path, "rb");
       if ( usb_fd != NULL )
       {
           fseek( usb_fd , 0 , SEEK_END );
           lSize = ftell (usb_fd);
           rewind( usb_fd );

           printf("File: %s - Size: %lu bytes\n", path, lSize);

           fclose( usb_fd );
       }
       else
       {
           printf("Could not open file %s\n", path );
       }
   }
}

結果如下:

File: /dev/bus/usb/001/001 - Size: 0 bytes

正如史蒂夫所提到的,文件大小在字元設備上很少有意義。

所以解決方案很簡單,打開,閱讀,完成。在這裡 ftell 的目的是什麼?如果你想提前分配一個緩衝區,答案是,你不能。

我建議你試試你的程序用/dev/tty. 也許首先想想你期望會發生什麼或應該發生什麼。

還有一點,在 Unix 系統上,所有的文件都是二進制的,所以 moderb不是必須的。在像 Windows 這樣的系統上,它會有所不同,但在 Windows 上甚至不太可能存在/dev/usb

引用自:https://unix.stackexchange.com/questions/650746