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
转载于:https://blog.51cto.com/shanying/558615