Linux下的非阻塞管道编程实践(linux非阻塞管道)

linux下的非阻塞管道编程实践

成都创新互联从2013年开始,先为宜章等服务建站,宜章等地企业,进行企业商务咨询服务。为宜章企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

现在,Linux系统的应用和R&D越来越多,对编程的要求也越来越高。非阻塞管道编程,是Linux下先进的编程技术,可以让开发人员获得更佳的编程效率。

非阻塞管道编程就是在POSIX标准下,把pipe文件描述符设置为非阻塞,然后在任何一端进行读写时,不会阻塞。开发人员可以立刻调用某端读取或写入操作,并及时获得数据。这一点对于一些实时性很强的应用特别有用,既可以提高编程效率,又能保证实时性。

基本的Linux管道编程实现,使用的是`pipe()`函数,用来创建管道,并将文件描述符分配给参数`fd[0]`和`fd[1]`,一侧为读,一侧为写。如果我们想要把管道编程设置为非阻塞,则需要用`fcntl()`函数来设置文件描述符为非阻塞。

//设置文件描述符fd为非阻塞

int flags = fcntl(fd, F_GETFL);

if (flags

return -1;

}

flags |= O_NONBLOCK;

int result = fcntl(fd, F_SETFL, flags);

if (result

return -1;

}

设定了文件描述符的非阻塞特性之后,完成打开一端管道的读写操作,从另一端的只读、只写也能实现,但此时,要明确一端什么时候可以读写,就像这样:

//完成读写操作

fd_set readFDs;

fd_set writeFDs;

//清空

FD_ZERO(&readFDs);

FD_ZERO(&writeFDs);

//添加要检查的socket

FD_SET (fd, &readFDs);

FD_SET (fd, &writeFDs);

int res = select(fd + 1, &readfd,&writefd,NULL,NULL);

if(res > 0){

//如果可以读

if(FD_ISSET (fd, &readFDs)){

// do read operation

}

//如果可以写

if(FD_ISSET (fd, &writeFDs)){

// do write operation

}

}

总之,Linux下非阻塞管道编程既注重编程效率,又能保证实时性,算是在POSIX平台的一大优势。在Linux应用的行业中,更多的采用这一方式,保证应用的稳定性和编程效率,让Linux系统的应用和R&D越来越多。

香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。

分享标题:Linux下的非阻塞管道编程实践(linux非阻塞管道)
分享路径:http://www.shufengxianlan.com/qtweb/news24/546574.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联