【发布时间】:2014-03-21 18:32:50
【问题描述】:
我正在开发一个 C 应用程序,用于评估来自 USB 激光扫描仪的数据,该扫描仪充当串行设备。出于测试目的,我还允许从文件中读取测试数据,因为始终连接扫描仪并不方便。
我这样打开文件/设备:
FILE *fp = fopen(argv[1], "a+b");
根据我是要从文件还是设备中读取,我会传递一个文件路径或类似 /dev/cu.usbmodemfd121 的东西(我在 Mac 上)。
只要我之前初始化了激光扫描仪,它就可以正常工作,但我宁愿让我的应用程序这样做。但是,为了做到这一点,我必须首先弄清楚我是从文件还是设备中读取。 鉴于fopen 返回的FILE *,我该怎么做?
我尝试使用fseek(fp, 1, SEEK_END),我预计扫描仪会失败,因为它的流没有“结束”,但由于某些原因fseek 不会失败..
【问题讨论】:
-
明显的人说,“如果文件名以
/dev开头,你不能只检查文件名并假设你正在与设备通话吗?” -
Obvious Man 非常务实,虽然我更喜欢 @cnicutars,因为它更通用,如果他发布了它,我会赞成 Obvious Man 的答案。