unistd 提供的 read 怎么才能 timeout 退出。

最近在调试 android,使用 串口半双工模式接收数据,碰到的问题是 unistd 中的 read 是block的,怎样才能超时退出。
刚开始找到的资料说是 c_cc[VMIN] = 0, c_cc[VTIME] = 10; 这样就能配置为 1s 超时了。但是实际上并不能够达到超时退出的功能。
后来经过进一步的资料查找,发现需要使用 下面的方法才能实现功能, VTIME 的配置好像没那么重要。

        struct timeval timeout;
        timeout.tv_sec = 0;
        timeout.tv_usec = 100000;
        retval = select(fd + 1, &rfds, NULL, NULL, &timeout);

参考: https://stackoverflow.com/questions/10522277/how-can-i-implement-timeout-for-read-when-reading-from-a-serial-port-c-c
https://linux.die.net/man/2/select
http://man7.org/linux/man-pages/man2/select.2.html
https://blog.mbedded.ninja/programming/operating-systems/linux/linux-serial-ports-using-c-cpp/#reading

原文链接: https://www.cnblogs.com/ramlife/p/12426030.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    unistd 提供的 read 怎么才能 timeout 退出。

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/333754

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午9:20
下一篇 2023年3月1日 下午9:20

相关推荐