Devices
如何將字元設備作為二進製文件打開和讀取?
我正在使用 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 系統上,所有的文件都是二進制的,所以 mode
rb
不是必須的。在像 Windows 這樣的系統上,它會有所不同,但在 Windows 上甚至不太可能存在/dev/usb
。