首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-26 
串口通信中阻塞与非阻塞问题一般情况下串口通信中read()函数都是阻塞的。当然也可以通过设置文件等方法把串

串口通信中阻塞与非阻塞问题
一般情况下串口通信中read()函数都是阻塞的。
当然也可以通过设置文件等方法把串口设为非阻塞的。
这里就有一个问题,当串口设置为阻塞状况下,如果读不到数据程序应该挂起。
这种所谓的读不到数据是指读不到指定量的数据吗?
read(fd,read_buff,10)的话是要读10个字节才解除阻塞,继续执行下面程序?
还是看 option.c_cc[VMIN] = n;n是多少就读多少就解除阻塞,继续执行下面程序?

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


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

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

[解决办法]
同步和异步的概念,这两个概念与消息的通知机制有关

阻塞和非阻塞,这两个概念与程序等待消息(无所谓同步或者异步)时的状态有关

同步和异步仅仅是关于所关注的消息如何通知的机制,而不是处理消息的机制.也就是说,同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者

异步操作是可以被阻塞住的,只不过通常不是在处理消息时阻塞,而是在等待消息被触发时被阻塞

详见
http://www.cppblog.com/converse/archive/2009/05/13/82879.html

热点排行