主题 : 扫描枪read(barcode_fd,&my_input_event,sizeof(struct input_event))卡死 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 126101
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2016-06-20
最后登录: 2016-08-07
楼主  发表于: 2016-07-09 20:40

 扫描枪read(barcode_fd,&my_input_event,sizeof(struct input_event))卡死

我在做一个扫描钱的实验,在ubuntu系统下用QT做,barcode_fd = ::open("/dev/input/event2",O_RDONLY),
qDebug()<<tr("barcode_fd = %1").arg(barcode_fd);调试出来barcode_fd = 19,可是接下来读取数据就错了
result = ::read(barcode_fd,&my_input_event,sizeof(struct input_event));
这里就卡死了,不执行下面的语句了上面的其他语句也执行
跪求为何!!!!!!!!!!!!
级别: 新手上路
UID: 126101
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2016-06-20
最后登录: 2016-08-07
1楼  发表于: 2016-07-11 22:17
呵呵,原来不是死机,而是阻塞,按下按键程序就正常执行了
read函数只是一个通用的读文件设备的接口。是否阻塞需要由设备的属性和设定所决定。一般来说,读字符终端、网络的socket描述字,管道文件等,这些文件的缺省read都是阻塞的方式。如果是读磁盘上的文件,一般不会是阻塞方式的。但使用锁和fcntl设置取消文件O_NOBLOCK状态,也会产生阻塞的read效果