文字デバイスをバイナリファイルとして開いて読み込む方法は?

文字デバイスをバイナリファイルとして開いて読み込む方法は?

私は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

関連情報