【发布时间】:2017-08-04 14:36:06
【问题描述】:
我正在尝试使用 C 代码从操纵杆读取数据。我有found online the way to do it。
此解决方案似乎工作正常,但存在问题。当代码到达 read() 函数时,它会停止并等待,直到操纵杆设备发生变化:
int read_event(int fd, struct js_event *event)
{
ssize_t bytes;
bytes = read(fd, event, sizeof(*event));
if (bytes == sizeof(*event))
return 0;
return -1;
}
我试图找到一种方法让代码连续运行,如果控制设备没有变化,就返回之前的状态。到目前为止,我没有成功。也许有人可以帮忙。
【问题讨论】:
-
你是如何
opened 文件描述符的? -
2 个选项 - select(2) 或线程。
-
@EugeneSh。我打开它: device = "/dev/input/js0"; js = 打开(设备,O_RDONLY);与原始链接一样。
-
@JanusGowda
read()阻塞是正常的,直到它可以传输至少一个字节,除了以非阻塞模式打开的文件。通过在传递给open()的选项位掩码中包含标志O_NONBLOCK,您应该能够以非阻塞模式打开设备。 -
@JanusGowda 是的,读取等待直到有数据可供读取。