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_SERVER "/tmp/myfifo"
int 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");
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("写入 \"%s\" 到管道\n", w_buf);
}
return 0;
}
fifo_read.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"
int main(int argc, char**argv)
{
char buf_r[100];
int fd;
int nread;
if ((mkfifo(FIFO, O_CREAT|O_EXCL)<0)&&(errno!=EEXIST))
printf("can not create fifo server\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("读:\"%s\" 从管道中\n", buf_r);
sleep(1);
}
pause();
unlink(FIFO);
return 0;
}
编译命令:
cc fifo_write.c -o cli -g
cc fifo_read.c -o sev -g
启动读管道:
./sev
启动写管道:
./cli xxx