当前位置: 技术问答>linux和unix
poll函数操作fd,等待读取失败.怎么修改程序?
来源: 互联网 发布时间:2016-10-20
本文导语: 1. 创建两个fifo,用于读入数据. 2. main函数进入poll循环,监视这两个fd 3. 当poll返回>0的时候,读取管道的内容并打印 从命令行,用echo命令向myfifo1/myfifo2发送数据,我期待a.out立刻将数据打印出来。但是a.out阻塞了,...
1. 创建两个fifo,用于读入数据.
2. main函数进入poll循环,监视这两个fd
3. 当poll返回>0的时候,读取管道的内容并打印
从命令行,用echo命令向myfifo1/myfifo2发送数据,我期待a.out立刻将数据打印出来。但是a.out阻塞了,什么输出也没有。
我的代码问题在哪里?
2. main函数进入poll循环,监视这两个fd
3. 当poll返回>0的时候,读取管道的内容并打印
从命令行,用echo命令向myfifo1/myfifo2发送数据,我期待a.out立刻将数据打印出来。但是a.out阻塞了,什么输出也没有。
我的代码问题在哪里?
#include
#include
#include
#include
#include
#include
#include
char buf[20]={0};
int f(const char* fifo){
unlink(fifo);
mkfifo(fifo,0666);
return open(fifo,O_RDONLY);
}
void g(int fd){
read(fd,buf,sizeof(buf));
printf("read done:%sn",buf);
}
int main(void){
int fd1=f("myfifo1");
int fd2=f("myfifo2");
if(!(fd1||fd2))return 1;
struct pollfd myfifo[2];
myfifo[0].fd=fd1;
myfifo[0].events=POLLIN;
myfifo[1].fd=fd2;
myfifo[1].events=POLLIN;
int ret;
while(ret=poll(myfifo,fd2+1,-1)){
if(ret