专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 驱动开发

关于linux串口通信阻塞与非阻塞有关问题

发布时间:2010-06-14 17:45:12 文章来源:www.iduyao.cn 采编人员:星星草
关于linux串口通信阻塞与非阻塞问题。
一般情况下串口通信中read()函数都是阻塞的。
当然也可以通过设置文件等方法把串口设为非阻塞的。
这里就有一个问题,当串口设置为阻塞状况下,如果读不到数据程序应该挂起。
这种所谓的读不到数据是指读不到指定量的数据吗?
read(fd,read_buff,10)的话是要读10个字节才解除阻塞,继续执行下面程序?
还是看 option.c_cc[VMIN] = n;n是多少就读多少才解除阻塞?

如果出现阻塞的话,再有数据来,应该有唤醒机制。
但是貌似网上的例子,当设置为阻塞时,也没有出现唤醒处理啊。
这个是不是有内核自动完成了?


本人刚接触linux串口不久,请问一般什么情况下应该把串口设为非阻塞的?

还有规范模式下,把文件内容读入一个buff数组中,要想buff中有数据,
也要putchar('\n')? putchar不是应该往stdout中输出吗?应该与读入buff 数组中没关系才对啊?

------解决方案--------------------
read(fd,read_buff,10)我理解是读到数据就会返回,返回的结果就是读到多少字节


阻塞的话下面的程序不会继续执行,如果用查询的方式就用非阻塞了吧

剩下的没看懂
------解决方案--------------------
read(fd,read_buff,10),最大可以返回10个字节,如果读到了就会返回,返回你的实际读到的字节数,EOF应该是一个特殊的标识,read函数不会管你的文件结束的,读到EOF后要自己判断结束,或则你可以先计算出文件多长,打开文件后好像有个stsize的结构体,具体记不清了,然后读取到长度之后就不再调用read函数了就行。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: