https://www.cnblogs.com/meihao1203/p/8443827.html
2019年2月27日11:51周三农历 己亥 猪年 正月廿三
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# mkfifo 1.pipe 2.pipe
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# cat a.c
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
int main(int argc, char** argv)
{
int fdw = open(argv[1],O_WRONLY);
printf("fdw=%d\n",fdw);
write(fdw,"hello",5);
return 0;
}
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# cat b.c
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
int main(int argc, char** argv)
{
int fdr = open(argv[1],O_RDONLY);
printf("fdr=%d\n",fdr);
char buf[10]="";
read(fdr,buf,sizeof(buf));
printf("buf=%s\n",buf);
return 0;
}
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]#gcc a.c -o a
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]#gcc b.c -o b
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# cat makefile
target:a.c b.c
gcc a.c -o a #前面换行必须用tab键,否则报错:makefile:2: *** 遗漏分隔符 。 停止。
gcc b.c -o b
#.PHONY:clean
clean:
rm -f a b
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# make clean
rm -f a b
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# ll
总用量 12
prw-r--r-- 1 root root 0 2月 27 11:20 1.pipe
prw-r--r-- 1 root root 0 2月 27 11:20 2.pipe
-rw-r--r-- 1 root root 221 2月 27 11:34 a.c
-rw-r--r-- 1 root root 276 2月 27 11:36 b.c
-rw-r--r-- 1 root root 70 2月 27 11:49 makefile
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# make
gcc a.c -o a
gcc b.c -o b
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# ll
总用量 36
prw-r--r-- 1 root root 0 2月 27 11:20 1.pipe
prw-r--r-- 1 root root 0 2月 27 11:20 2.pipe
-rwxr-xr-x 1 root root 8610 2月 27 11:50 a
-rw-r--r-- 1 root root 221 2月 27 11:34 a.c
-rwxr-xr-x 1 root root 8609 2月 27 11:50 b
-rw-r--r-- 1 root root 276 2月 27 11:36 b.c
-rw-r--r-- 1 root root 70 2月 27 11:49 makefile
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]#
//如果打开读端,但是没有打开对应的写端,进程会卡住,等待写端打开
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# ./a 1.pipe &
[1] 31969
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# ./b 1.pipe &
[2] 31973
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]#
fdr=3
fdw=3
buf=hello
[1]- 完成 ./a 1.pipe
[2]+ 完成 ./b 1.pipe
/*************两个进程***********/
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]#
fdw=3
fdr=3
buf=hello
[1]- 完成 ./b 1.pipe
[2]+ 完成 ./a 1.pipe
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]#
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# cat a.c
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<string.h>
int main(int argc,char* argv[]){
if(argc !=3){
printf("error args\n");
return -1;
}
int fdw=open(argv[1],O_WRONLY);
if(-1==fdw){
perror("open");
return -1;
}
int fdr=open(argv[2],O_RDONLY);
if(-1==fdr){
perror("open1");
return -1;
}
// printf("fdr=%d,fdw=%d\n",fdr,fdw);
char buf[128];
while(1){
bzero(buf,sizeof(buf));
read(0,buf,sizeof(buf)); //读取标准输入
write(fdw,buf,strlen(buf)-1); //写入管道,回车不要
memset(buf,0,sizeof(buf));
read(fdr,buf,sizeof(buf)); //读取管道
printf("%s\n",buf); //把读到的内容写到屏幕
}
return 0;
}
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# cat b.c
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<string.h>
int main(int argc,char* argv[]){
if(argc !=3){
printf("error args\n");
return -1;
}
int fdr=open(argv[1],O_RDONLY);
if(-1==fdr){
perror("open");
return -1;
}
int fdw=open(argv[2],O_WRONLY);
if(-1==fdw){
perror("open1");
return -1;
}
// printf("fdr=%d,fdw=%d\n",fdr,fdw);
char buf[128];
while(1){
bzero(buf,sizeof(buf));
read(fdr,buf,sizeof(buf));//读取管道
printf("%s\n",buf);
bzero(buf,sizeof(buf));
read(0,buf,sizeof(buf));//读取标准输入
write(fdw,buf,strlen(buf)-1);//写入管道
}
return 0;
}
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]#
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# ./a 1.pipe 2.pipe
^C
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# ./b 1.pipe 2.pipe
b_fdr=3,b_fdw=4
adsd
b_buf=adas
b_buf=asdasfa
adsfsdgsdgf
asdaf
sdagfdshgds
b_buf=asfvgvfsdagv
^C
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# cat b.c
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<string.h>
int main(int argc,char* argv[]){
if(argc !=3){
printf("error args\n");
return -1;
}
int fdr=open(argv[1],O_RDONLY);
if(-1==fdr){
perror("open");
return -1;
}
int fdw=open(argv[2],O_WRONLY);
if(-1==fdw){
perror("open1");
return -1;
}
printf("b_fdr=%d,b_fdw=%d\n",fdr,fdw);
char buf[128];
while(1){
bzero(buf,sizeof(buf));
read(fdr,buf,sizeof(buf));//读取管道
//memmove(buf,"hello a",10);
printf("b_buf=%s\n",buf);
bzero(buf,sizeof(buf));
read(0,buf,sizeof(buf));//读取标准输入
write(fdw,buf,strlen(buf)-1);//写入管道
}
return 0;
}
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]# cat a.c
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<string.h>
int main(int argc,char* argv[]){
if(argc !=3){
printf("error args\n");
return -1;
}
int fdw=open(argv[1],O_WRONLY);
if(-1==fdw){
perror("open");
return -1;
}
int fdr=open(argv[2],O_RDONLY);
if(-1==fdr){
perror("open1");
return -1;
}
printf("a_fdr=%d,a_fdw=%d\n",fdr,fdw);
char buf[128];
while(1){
bzero(buf,sizeof(buf));
read(0,buf,sizeof(buf)); //读取标准输入
//memmove(buf,"hello b",10);
write(fdw,buf,strlen(buf)-1); //写入管道,回车不要
memset(buf,0,sizeof(buf));
read(fdr,buf,sizeof(buf)); //读取管道
printf("_buf=%s\n",buf); //把读到的内容写到屏幕
}
return 0;
}
[root@10.67.9.137 /newhome/wuyaoyao/Linux_Bash]#