我正在调试我在应用程序中使用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调用阻塞了将近一秒,这大约是设备完成发送所有数据所需的时间。不确定时机是否巧合。
我的理解是,只要有文件描述符上的数据读取,就应该取消阻止,就是这种情况吗?我在开放时错过了一些旗帜吗?我需要确保配置其他一些设置吗?在写入数据的同时读取文件描述符是否有任何问题?
答案 0 :(得分:0)
选择已知存在问题。它的效率仍然是一个问题。你可以试试inotify。