下面的程序实现的功能是:
writefifo.c完成从打开输入的文件名,然后将内容读取到管道
readfifo.c完成将管道中读到的内容写到输入的文件名中。
writefifo.c :
#include#include #include #include #include #include #include #include #include #define N 64int main(int argc, char *argv[]){ int fd, pfd; char buf[N] = {0}; ssize_t n; if (argc < 2) { printf("usage:%s srcfile\n", argv[0]); return 0; } if (-1 == mkfifo("fifo", 0666)) //创建管道 { if (errno != EEXIST) { perror("mkfifo"); exit(-1); } } if ((fd = open(argv[1], O_RDONLY)) == -1) //打开要读的文件 { perror("open srcfile"); exit(-1); } if ((pfd = open("fifo", O_WRONLY)) == -1) //打开管道 { perror("open fifo"); exit(-1); } while ((n = read(fd, buf, N)) > 0) //读文件,当读到末尾时,n为0 write(pfd, buf, n); //将读到的内容写入管道 close(fd); close(pfd); return 0;}
readfifo.c
#include#include #include #include #include #include #include #include #include #define N 64int main(int argc, char *argv[]){ int fd, pfd; char buf[N] = {0}; ssize_t n; if (argc < 2) //检查输入的参数是否合法 { printf("usage:%s destfile\n", argv[0]); return 0; } if (-1 == mkfifo("fifo", 0666)) //创建一个名称为fifo的管道 { if (errno != EEXIST) //如果创建错误,看错误码是否为EEXIST,即看要创建的管道是否已经存在 { perror("mkfifo"); exit(-1); } } if ((fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0666)) == -1) //打开要写的文件 { perror("open destfile"); exit(-1); } if ((pfd = open("fifo", O_RDONLY)) == -1) //打开管道 { perror("open fifo"); exit(-1); } while ((n = read(pfd, buf, N)) > 0) //读管道,当读到n为0时,说明写端已经关闭 write(fd, buf, n); //将读到的内容写到文件中 close(fd); //关闭要写的文件 close(pfd); //关闭管道 return 0;}