易截截图软件、单文件、免安装、纯绿色、仅160KB

关于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环境下gethostbyname函数问题 - C/C++ / C语言

写了个测试程序如下
   
  struct hostent *hp; 
char AlarmDevIP[20];  
  int x2;

hp = gethostbyname("www.google.com");
if (hp)
{ ......

Linux 目录问题

Linux新手,请大哥大姐不要见笑。

我用root用户登录到Linux系统。在根目录下面建了目录dir1,后用命令cd /dir1进入到dir1目录下,然后再用mkdir dir2建立了目录dir2 ,再后来用命令cd /dir2是,提示为:-bush ......

Linux Socket HTTP请求的问题,高手进!

小弟最近需要一个用socket获取html文档的代码,但是老是不能获取完整的html源码。原因不明,望高手指点!
C/C++ code:

char *Http_GET(char *host,int port,char *data) //发送GET请求
{
char response[2 ......

请问Ubuntu Linux 怎么实现离线更新呢?

现在我有两台机 一个在家  一个在学校  在学校的那台机子不能上网  我把家里的那台机子更新到最新了  然后把 /var/cache/apt/archives  下的所有Deb包复制到学校那台没联网的机子上了&nbs ......

硬盘安装RedFlag LINUX 后还可以安装WINDOWS吗

是这样的,近段在WINDOWS上上网时总是有病毒,我不习惯装杀毒软件,以前也一直没装过,觉得麻烦。然后就硬盘安装了LINUX,还好,可以上网,可以查东西。但是我是在WINDOWS下做软件开发的,还想装上WINDOWS,不知道能 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号