下面的程序实现的功能是:

writefifo.c完成从打开输入的文件名,然后将内容读取到管道

readfifo.c完成将管道中读到的内容写到输入的文件名中。

 

writefifo.c :

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <strings.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #define N 64 int 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 <stdio.h> #include <stdlib.h> #include <unistd.h> #include <strings.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #define N 64 int 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; }

 

 

 

相关文章:

  • 2021-07-18
  • 2021-01-06
  • 2022-12-23
  • 2021-05-16
  • 2021-11-12
猜你喜欢
  • 2021-10-17
  • 2022-12-23
  • 2022-12-23
  • 2021-12-13
  • 2021-10-26
  • 2021-08-09
  • 2021-11-13
相关资源
相似解决方案