如何以二进制文件形式打开和读取字符设备?

如何以二进制文件形式打开和读取字符设备?

我正在使用 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

答案1

正如史蒂夫所提到的,文件大小在字符设备上几乎没有意义。

所以解决方案就是简单地打开、阅读、完成。这里 ftell 的目的是什么?如果你想提前分配一个缓冲区,答案是,你不能。

我建议你尝试一下你的程序用/dev/tty.也许首先想想你期望会发生什么或应该发生什么。

还有一点是,在Unix系统上,所有文件都是二进制的,所以模式rb不是必需的。在像 Windows 这样的系统上,它会有所不同,但在 Windows 上甚至不太可能存在/dev/usb

相关内容