[原文]
fork()函数:用于创建子进程,子进程完全复制父进程的资源,相当于父进程的拷贝。具体理解,运用父进程的同一套代码,通过判断进程ID来执行不同进程的不同任务。
返回值正常为子进程ID,出错返回负值。
pipe()函数:用于创建管道,返回负值表示创建失败。
简单实例:
功能:父进程通过管道向子进程传递字符串,然后子进程向屏幕打印出所收到的字符串。
- <pre class="objc" name="code">#include <stdio.h>
- #include <unistd.h>
- #include <sys/types.h>
-
- int main(void)
- {
- int n,fd[2];
- pid_t pid;
- char line[1024];
-
- if (pipe(fd) < 0)
- return 1;
- if ((pid=fork()) < 0)
- return 1;
- else if (pid > 0) //parent
- {
- close(fd[0]); //close parent's read-port
- write(fd[1],"I am from parent!
",19); //write to pipe
- }
- else //child
- {
- close(fd[1]); //close child's write-port
- n = read(fd[0],line,1024); //read from pipe
- printf("%s%d
",line,n);
- }
- printf("I am public!
");
- return 1;
- }
运行结果:
I am public!
I am from parent!
19
I am public!
通过上面实例,可以清楚认识父子进程运行情况;通过关闭父进程读端口,关闭子进程写端口实现数据由父进程传向子进程的单向管道传输。