c语言 管道
从父进程流向子进程的管道
在父进程创建无名管道并产生子进程后,父子进程均拥有管道两端的访问权。此时关闭父进程的管道输出端、关闭子进程的管道输入端,就形成一个从父进程到子进程的管道流,数据由父进程写入、从子进程读出。创建从父进程流向子进程的管道过程如下:
1st:创建管道,返回无名管道的两个文件描述符fildes[0]和fildes[1]。
int fildes[2];
pipe(fildes);
2nd:创建子进程,子进程继续无名管道文件描述符。
3rd:父进程关闭管道的输出端,即关闭只读文件描述符fildes[0]。
close(fildes[0]);
4th:子进程关闭管道的输入端,即关闭只写文件描述符fildes[1]。
close(fildes[1]);
#include <unistd.h>
#include <stdio.h>
#include <string.h>
void main()
{
int fildes[2];
pid_t pid;
int i, j;
char buf[256];
if ( pipe( fildes ) < 0 )//创建管道,fildes[0]为读,fildes[1]为写
{
fprintf( stderr, "pipe error!\n" );
return;
}
if ( (pid = fork() ) < 0 )
{
fprintf( stderr, "fork error!\n" );
return;
}
if ( pid == 0 )//子进程
{
close(fildes[1]);
memset( buf,0, sizeof(buf) );
j = read( fildes[0], buf, sizeof(buf) );
fprintf( stderr, "[child] buf =[%s] len [%d] \n", buf, j );
return ;
}
close(fildes[0]);
write( fildes[1], "Hello !", strlen( "Hello !" ) );
write( fildes[1], "World !", strlen( "World !" ) );
printf("The main end !\n");
}