저는 USB를 사용하고 있으며 /dev/bus/usb/00x/00y에 있는 USB 장치 설명자의 내용을 읽고 싶습니다. 이는 문자 장치입니다.
저는 fopen을 사용하여 "rb" 매개변수가 있는 바이너리 파일로 엽니다. 그러나 파일 크기를 얻기 위해 "find" 및 "tell"을 수행하면 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
답변1
Steve가 언급했듯이 문자 장치에서는 파일 크기가 거의 의미가 없습니다.
따라서 해결책은 간단히 열고, 읽고, 끝내는 것입니다. 여기서 ftell의 목적은 무엇입니까? 미리 버퍼를 할당하고 싶다면 대답은 '할 수 없다'입니다.
나는 당신이 당신의 프로그램으로 그것을 시도해 볼 것을 제안합니다 /dev/tty
. 어쩌면 먼저 당신이 예상하는 일이나 일어날 일에 대해 생각해보세요.
또 다른 점은 Unix 시스템에서는 모든 파일이 바이너리이므로 모드가 rb
필요하지 않다는 것입니다. Windows와 같은 시스템에서는 다를 수 있지만 Windows에도 존재할 가능성은 거의 없습니다 /dev/usb
.