代码改变世界

linux 管道编程

2013-05-21 08:57  夏洛克·福尔摩斯  阅读(217)  评论(0编辑  收藏  举报
//fifo_read.c

#include<sys/types.h>
#include<sys/stat.h>
#include<errno.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#define FIFO_SERVER "/tmp/myfifo"

main(int argc,char **argv)
{
int fd;
char w_buf[100];
int nwrite;

fd=open(FIFO_SERVER,O_WRONLY|O_NONBLOCK,0);

if(argc==1)
{
printf("please send something\n");
exit(-1);
}
strcpy(w_buf,argv[1]);
if((nwrite=write(fd,w_buf,100))==-1)
{
if(errno==EAGAIN)
      printf("the fifo has not been read yet.please try later\n");

}
else
printf("write %s to the fifo\n",w_buf);
}
//fifo_write.c
#include<sys/types.h>
#include<sys/stat.h>
#include<errno.h>
#include<fcntl.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define FIFO "/tmp/myfifo"

main(int argc,char **argv)
{
char buf_r[100];
int fd;
int nread;

if((mkfifo(FIFO,O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
printf("cannot create fifoserver\n");

printf("preparing for reading bytes...\n");
memset(buf_r,0,sizeof(buf_r));

fd=open(FIFO,O_RDONLY|O_NONBLOCK,0);
if(fd==-1)
{
perror("open");
exit(1);
}
while(1)
{
memset(buf_r,0,sizeof(buf_r));
if((nread=read(fd,buf_r,100))==-1)
{
    if(errno==EAGAIN)
        printf("no data yet\n");

}
printf("read %s from FIFO\n",buf_r);
sleep(1);

}
pause();

}