Linux rs232读取 - 选择呼叫似乎阻塞,直到数据不再被发送

时间:2014-10-23 04:35:33

标签: c linux serial-port

我正在调试我在应用程序中使用select调用看到的一些延迟问题。我正在用以下标志打开我的rs232文件句柄:

rs232_fd = open("/dev/ttys3", O_RDWR | O_NOCTTY | O_NDELAY | O_EXCL);

并按如下方式尝试选择呼叫:

struct timeval tv;
fd_set set;

FD_ZERO(&set);
FD_SET(rs232_fd, &set);

tv.tv_sec = 1;
tv.tv_usec = 500000;

select(rs232_fd+1, &set, NULL, NULL, &tv)

我有一个嵌入式设备写入串口,以115200波特率发送~10kB块。我想开始处理数据,但我看到的是,select调用阻塞了将近一秒,这大约是设备完成发送所有数据所需的时间。不确定时机是否巧合。

我的理解是,只要有文件描述符上的数据读取,就应该取消阻止,就是这种情况吗?我在开放时错过了一些旗帜吗?我需要确保配置其他一些设置吗?在写入数据的同时读取文件描述符是否有任何问题?

1 个答案:

答案 0 :(得分:0)

选择已知存在问题。它的效率仍然是一个问题。你可以试试inotify。