reader.c     从argv[1]所指定的文件中读取内容,依次写到管道
 /home/linux/myfifo中
 
writer.c     从管道/home/linux/myfifo中读取内容,写到argv[1]所指定
 的文件中并保存
==========================================write.c=======================================================
#include"common.h"

int main(int argc, char *argv[])

 if(argc!=2)//判断输入参数的数量
 {
  printf("shu ru cuo wu\n");
  exit(0);
 }
 int fd;
 fd=open(argv[1],O_RDWR);
 if( 0 > fd)
 {
  perror("open1");
  exit(-1);
 }
 int ret=mkfifo(GUAN,O_CREAT|O_EXCL | 0666);//O_EXCL判断文件是否存在,存在,就不执行。创建有名管道,只能linux目录下建立,在与window共享的目录下不成立
 if( (0 > ret )&&(errno!=EEXIST))//文件存在也不执行
 {
  perror("mkfifo");
  exit(-1);
 }
 int pfd=open(GUAN,O_RDWR);
 if( 0 > pfd)
 {
  perror("open2");
 }
 char buf[MAX]="";
 int pfd1=read(fd,buf,sizeof(buf));//通过一个中间缓存读出文件 
 close(fd);
 if( 0 > pfd1)
 {
   perror("write1");
   exit(-1);
 }
 int pfd2=write(pfd,buf,pfd1); //将buf中的内容写到pfd中,写的时候必须指明写多少个,如果文件中有1个,要写2到另一个文件就是那一个加乱码
     //即这里的pfd1不能写成sizeof(buf)
 close(pfd);
 if( 0 > pfd2)
 {
   perror("write2");
   exit(-1);
 }
 
 
}
gcc -o build1 write.c
./build1 1.txt


==========================================read.c=======================================================

#include"common.h"

int main(int argc, char *argv[])

 
 if(argc!=2)
 {
  printf("shu ru cuo wu\n");
  exit(0);
 }
 int fd;
 char buf[MAX]="";
 fd=open("GUAN",O_RDWR);
 int pfd1=read(fd,buf,MAX); 
 close(fd);
 if( 0 > pfd1)
 {
   perror("write");
   exit(-1);
 }
 int ret=open(argv[1],O_CREAT|O_EXCL|0666);
 
 write(ret,buf,pfd1);
 close(argv[1]);

 
}

gcc -o build2 write.c
./build2 2.txt
==========================================common.h=======================================================
#ifndef  _COMMON_H_
#define  _COMMON_H_

#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include <errno.h>
#include <stdio.h>
#define  MAX    1024

#define   GUAN   "/home/zhao/myfifo"
#endif