Felixxx 的学生作业:
read:
#include
#include
#include
#include
#include
#include
#include
#define FIFOPATH "./fifo_test_3"
#define MAXEVENTS 10
int main()
{
int epfd,ret,fd,rbytes;
char rbuffer[64] = {0};
struct epoll_event ev;//输入事件
struct epoll_event res_ev[MAXEVENTS];//接收就绪事件(输出)
ret = mkfifo(FIFOPATH,0644);
if(ret == -1)
{
perror("[ERROR] mkfifo():");
exit(EXIT_FAILURE);
}
fd = open(FIFOPATH,O_RDONLY | O_NONBLOCK);
if(fd == -1)
{
perror("[ERROR] open():");
exit(EXIT_FAILURE);
}
epfd = epoll_create(1);
ev.data.fd = fd;
ev.events = EPOLLIN;
ret = epoll_ctl(epfd,EPOLL_CTL_ADD,fd,&ev);
if(ret == -1)
{
perror("[ERROR] epoll_ctl():");
exit(EXIT_FAILURE);
close(fd);
}
while(1)
{
ret = epoll_wait(epfd,res_ev,MAXEVENTS,5000);
if(ret == -1)
{
perror("[ERROR] epoll_wait():");
exit(EXIT_FAILURE);
close(fd);
}
else if(ret == 0)
printf("Time Out.\n");
else if(ret > 0)
{
for(int i = 0 ; i < ret ; i ++)
{
if(res_ev[i].data.fd == fd)
{
rbytes = read(fd,rbuffer,sizeof(rbuffer));
if(rbytes == -1)
{
perror("[ERROR] read():");
exit(EXIT_FAILURE);
close(fd);
}
else if(rbytes == 0)
{
close(fd);
unlink(FIFOPATH);
}
else if(rbytes > 0)
printf("buffer is %s \n",rbuffer);
}
}
}
}
return 0;
}
write:
#include
#include
#include
#include
#include
#include
#include
#define FIFOPATH "./fifo_test_3"
int main()
{
int fd,ret;
char wbuffer[64] = "fifo pipe.";
ret = access(FIFOPATH,F_OK);
if(ret == -1)
mkfifo(FIFOPATH,0644);
fd = open(FIFOPATH,O_WRONLY);
if(fd == -1)
{
perror("[ERROR] open():");
exit(EXIT_FAILURE);
}
int wbytes;
wbytes = write(fd,wbuffer,strlen(wbuffer)+1);
if(wbytes < 0)
perror("[ERROR] write():");
else
printf("success!buffer:%s\n",wbuffer);
close(fd);
return 0;
}
【图片】