Fosdccf.blog.chinaunix.net
sdccf
全部博文(19283)
Linux酷软(214)
tmp(0)
PostgreSQL(93)
Solaris(383)
AIX(173)
SCOUNIX(575)
DB2(1005)
Shell(386)
C/C++(1187)
MySQL(1750)
Sybase(465)
Oracle(3695)
Informix(548)
HP-UX(0)
IBM AIX(2)
Sun Solaris(0)
BSD(1)
Linux(8597)
SCO UNIX(23)
2011年(1)
2009年(125)
2008年(19094)
2007年(63)
clifford
linky521
曾德标
fengzhan
leon_yu
mcuflowe
yt200902
guanyuji
GY123456
snow888
carlos94
丸喵喵
sean229
cxunix
可怜的猪
cqxc413
xzzgege
wb123456
分类: C/C++
2008-05-01 17:56:54
#include #include #include #include #include #include #include #include int main(){ int ipc[2]; int i = 0; int maxfd; fd_set rset; int rc; char buf[BUFSIZ]; //4096 if(pipe(ipc) == -1) { printf("error: pipe"); return -1; } printf("pipe success\n"); FD_ZERO(&rset); FD_SET(ipc[0], &rset); maxfd = ipc[0]; while(1) {// rc = select(maxfd + 1, &rset, NULL, NULL, NULL); //阻塞 // if(rc == -1)// {// printf("Error: Select");// continue; //继续等待// } sleep(1); printf("write\n"); write(ipc[1], "hello,world", 12); if(FD_ISSET(ipc[0], &rset)) //阻塞 { //读取 read(ipc[0], buf, BUFSIZ); printf("buf = %s\n", buf); } else printf("can not read\n"); } return 1; }如果select不设置超时即 struct timeval to; to.tv_sec=30; to.tv_usec=0; select(fd+1, &rset, NULL, NULL, &to);那么到select 语句,将一直阻塞。如果前面没有write数据,那么FD_ISSET(ipc[0], &rset) 也是一直阻塞。
原文:http://careerman.blog.ccidnet.com/blog-htm-do-showone-uid-12026-type-blog-itemid-286248.html
上一篇:linux中select()函数分析
下一篇:关于linux下多线程和互斥锁
登录 注册