关于linux的串口阻塞与非阻塞通信设置问题
大家好:
关于linux的串口通信设置有一个问题不明白,还请大家帮忙看下:
要设置为阻塞型读取:
方式1:那么open的时候不带 O_NODELY/O_NOBLOCK 这个参数,如果带了就是非阻塞
方式2:通过设置c_cc[VMIN] > 0为阻塞, =0 时为非阻塞
方式3:open时带了O_NODELY/O_NOBLOCK ,然后通过fcntl(fd, F_SETFL, 0)来恢复。
问题是:
我自己测试下来发现设置c_cc[VMIN] > 0后,不管open的时候带不带O_NODELY/O_NOBLOCK ,都为阻塞型了。也就是说这3种方式的本质其实就是设置c_cc[VMIN]决定阻塞还是不阻塞?是这样么?
设置串口的时候一般需要设置的就是波特率,奇偶校验,停止位,硬件控制流等。
而对于打开时的属性如阻塞与非阻塞,可以通过open()来设置,如
int fd;
fd=open("filename",O_NONBLOCK);
或者通过fcntl()来设置。
int flags;
if((flags=fcntl(fd,F_GETFL,0))==-1){
PERROR("fcntl ERR:get the fd attribute failure\n");
PDEBUG("errno=%d\n",errno);
return flags;
}
else{ /*set the socket to be the specific I/O mode*/
fcntl(fd,F_SETFL,flags|IO_MODE);
}
希望有更多的朋友来发发言哦。。。。。!
我这里说的“c_cc[VMIN] > 0为阻塞, =0 时为非阻塞”是termios结构体中的控制特性
相关问答:
大家好,本人目前刚刚接触Linux。现在公司的项目需要缩减Linux的Kernel和APP部分的Code Size。目前我们使用的是Linux2.6.22.15版本,应用于ADSL Modem(家庭网关)。
1.我们产品应用是ADSL Gateway,Kernel部 ......
小弟最近需要一个用socket获取html文档的代码,但是老是不能获取完整的html源码。原因不明,望高手指点!
C/C++ code:
char *Http_GET(char *host,int port,char *data) //发送GET请求
{
char response[2 ......
一直用svn来做资源的管理,
现在发现windows下取svn 要10个小时左右(资源大约有20G,全是小文件)
linux下取仅用40分钟,
请问linux的文件系统在哪儿比windows文件系统强力?
svn 可够慢的。
在 ......
不知道是什么原因,我该如何处理,请大虾们指教了,小弟在此谢过。。。。
错误信息如下:
The program being debugged was signaled while in a function called from GDB.
GDB has restored the context t ......