#include <stdio.h>
#include <unistd.h>
// #define M 6
int main()
{
int pipefd[2];
int pid;
int m;
if (pipe(pipefd) < 0)
{
printf("Unable to create pipe!\n");
return 1;
}
if((pid = fork())<0)
{
printf("Unable to fork!\n");
return 1;
}
//parent
//m = M;
else if (pid > 0)
{
printf("please input number,will boot sub-process:");
scanf("%d",&m);
close(pipefd[0]); //close read end
write(pipefd[1], &m, sizeof(int)); //write M
wait(NULL); // wait for child complete
close(pipefd[1]);
}
else
{
close(pipefd[1]);
printf("pipe has already booted...\n");
read(pipefd[0], &m, sizeof(int)); //read M
while(m>0)
{
printf("Hello world.\n");
m--;
}
close(pipefd[0]);
}
return 0;
}
//fork()返回两个结果,对主进程返回>0的pid,对子进程返回0
/*执行结果如下:*/
pipe has already booted...
please input number,will boot sub-process:3
Hello world.
Hello world.
Hello world.
pipe close...