|
发表于 2007-6-3 11:56:19
|
显示全部楼层
顺便说一下termios中的c_cc域中VTIME和VMIN的一些提示。
假设终端处于raw模式,进程发出了read的系统调用,并等待结果。
如果VTIME和VMIN均大于0.
VTIME表示读取字符间隔的时间,但仅在接收到第一个字符之后才起作用。在VTIME超时之前,tty设备的读缓冲区已经有了VMIN个字符,那么read立刻返回。若已经接收到1个字符,VTIME超时,那么read至少能返回一个字符。如果连第一个字符都没有收到,那么进程阻塞。
如果VMIN>0,VTIME=0。
如果读到了VMIN个字符,那么立刻返回。否则进程被阻塞。
如果VMIN=0,VTIME>0。
当收到一个字符或者超时时,read返回。返回值可能为1或者0。
如果VMIN=0,VTIME=0。
那么返回不超过read调用所指示的字节数的缓冲区内所有可用字符。如果缓冲区没有字符,那么返回0。
可见如果应用程序想真正收到指定的字节数目还是选择最后一种情况比较好。
另外一点,当调用write写串口时,驱动程序会从用户提供的缓冲区一个字符一个的取然后copy到tty设备驱动的发送缓冲区,当发送缓冲区充满之后或者用户的缓冲区字符拿完之后才去真正的写串口。
所以write时最好把count参数最好设置为1 |
|