关于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结构体中的控制特性
相关问答:
写了个测试程序如下
struct hostent *hp;
char AlarmDevIP[20];
int x2;
hp = gethostbyname("www.google.com");
if (hp)
{
......
Linux新手,请大哥大姐不要见笑。
我用root用户登录到Linux系统。在根目录下面建了目录dir1,后用命令cd /dir1进入到dir1目录下,然后再用mkdir dir2建立了目录dir2 ,再后来用命令cd /dir2是,提示为:-bush ......
小弟最近需要一个用socket获取html文档的代码,但是老是不能获取完整的html源码。原因不明,望高手指点!
C/C++ code:
char *Http_GET(char *host,int port,char *data) //发送GET请求
{
char response[2 ......
现在我有两台机 一个在家 一个在学校 在学校的那台机子不能上网 我把家里的那台机子更新到最新了 然后把 /var/cache/apt/archives 下的所有Deb包复制到学校那台没联网的机子上了&nbs ......
是这样的,近段在WINDOWS上上网时总是有病毒,我不习惯装杀毒软件,以前也一直没装过,觉得麻烦。然后就硬盘安装了LINUX,还好,可以上网,可以查东西。但是我是在WINDOWS下做软件开发的,还想装上WINDOWS,不知道能 ......