您的位置:首页 > 运维架构 > Linux

Linux 管道编程

2015-10-06 12:17 447 查看
一,二节管道,一条管道

who sort 的形式

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int ac,char *av[]){
int pid;
int apipe[2];
if(ac != 3){
fprintf(stderr,"need 2 parameters\n");
exit(1);
}

if(pipe(apipe) == -1){
perror("pipe");
exit(1);
}

pid = fork();

switch(pid){
case -1:
perror("fork");
exit(1);
case 0: // 子进程
close(apipe[0]);
dup2(apipe[1],1);
close(apipe[1]);
execlp(av[1],av[1],NULL);
exit(1);
default: // 父进程
close(apipe[1]);
dup2(apipe[0],0);
close(apipe[0]);
execlp(av[2],av[2],NULL);
exit(1);
}
return 0;
}
[war@war pipen]$ ./pipe2 find head

.

./pipe2.o

./pipe3

./test2

./pipe3.o

./demo2

./pipe2.c

./demo1

./pipe2

./pipe3.c

[war@war pipen]$

第二种形式:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int ac,char *av[]){
if(ac != 3){
fprintf(stderr,"need 3 parameters.\n");
exit(1);
}

int pid;
int pipea[2];

if(pipe(pipea) == -1){
perror("pipe");
exit(1);
}

pid = fork();

switch(pid){
case -1:
perror("fork");
exit(1);
case 0:
close(pipea[1]);
dup2(pipea[0],0);
close(pipea[0]);
execlp(av[2],av[2],NULL);
exit(0);
default:
close(pipea[0]);
dup2(pipea[1],1);
close(pipea[1]);
sleep(1);                     // 等待子进程先完成
execlp(av[1],av[1],NULL);
exit(0);
}
return 0;
}
[war@war pipen]$ ./pipe3 find head

.

./pipe2.o

./pipe3

./test2

./pipe3.o

./demo2

./pipe2.c

./demo1

./pipe2

./pipe3.c

[war@war pipen]$

这里加了延时,是为了让子进程先完成.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: