当前位置: 代码迷 >> 驱动开发 >> 关于linux串口通信阻塞与非阻塞有关问题
  详细解决方案

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

热度:481   发布时间:2016-04-28 11:23:12.0
关于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函数了就行。