我正在开发一个C应用程序来评估来自USB激光扫描仪的数据,该激光扫描仪充当串行设备.出于测试目的,我还允许从文件中读取测试数据,因为始终连接扫描仪并不方便.
我像这样打开文件/设备:
FILE *fp = fopen(argv[1], "a+b");
Run Code Online (Sandbox Code Playgroud)
根据我是否要从文件或设备读取,我传递文件路径或类似的东西/dev/cu.usbmodemfd121(我在Mac上).
只要我以前初始化激光扫描仪,这种方法就可以正常工作,但我宁愿让我的应用程序这样做.但是,为了做到这一点,我必须首先弄清楚我是在读取文件还是设备.如果FILE *归来的话,我怎么能这样做fopen呢?
我已经尝试使用fseek(fp, 1, SEEK_END)我预期的扫描仪失败,因为它的流没有"结束",但由于某些原因fseek不会失败..
您可以使用文件描述符fileno,然后对其执行操作fstat.将struct stat它填充包含这样想st_mode这说明FD的类型.我猜你的非文件设备S_ISCHR将是真的或至少S_ISREG是假的.
如果您可以控制它,请不要这样做fopen.open直接使用获取文件描述符,然后使用,fdopen如果你真的想要C流.
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |