#include <func.h>
//同时对一个管道进行读写
int main(int argc, char *argv[])
{
ARGS_CHECK(argc,2);
//遵循POSIX(可移植),以非阻塞方式同时建立管道的读写端
int fdr = open(argv[1] , O_RDWR|O_NONBLOCK);
ERROR_CHECK(fdr,-1,"open");
int fdw = open(argv[1] , O_RDWR|O_NONBLOCK);
ERROR_CHECK(fdw,-1,"open");
fd_set rdset;//读等待集合
fd_set wrset;//写等待集合
int cnt=0;
char wrbuf[4096];
char rdbuf[4096];
while(1)
{
FD_ZERO(&rdset);
FD_ZERO(&wrset);
FD_SET(fdr,&rdset);
FD_SET(fdw,&wrset);
select(fdw+1,&rdset,&wrset,NULL,NULL);//写端的文件描述符是最大的
if(FD_ISSET(fdw,&wrset))
{//写端就绪
// gets(wrbuf);
printf("cnt=%d\n",++cnt);
// read(STDIN_FILENO,wrbuf,sizeof(wrbuf));
write(fdw,wrbuf,4096);//一次写入不能超过4096字节,因为内核缓冲区大小为4096B,超过会写阻塞
puts("write success");
}
if(FD_ISSET(fdr,&rdset))
{//读端就绪
read(fdr,rdbuf,sizeof(rdbuf));
puts(rdbuf);
puts("read success");
}
}
close(fdr);
close(fdw);
return 0;
}
同时建立一个管道的读写
猜你喜欢
转载自blog.csdn.net/qq_43496435/article/details/114242167
今日推荐
周排行