문자 장치를 바이너리 파일로 열고 읽는 방법은 무엇입니까?

문자 장치를 바이너리 파일로 열고 읽는 방법은 무엇입니까?

저는 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.

관련 정보