串口通信中阻塞与非阻塞问题
一般情况下串口通信中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