分类: LINUX
2009-09-17 10:18:31
#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
int
main(int argc, char *argv[])
{
int pipefd[2];
pid_t cpid;
char buf;
assert(argc == 2); /* for debug
*/
if (pipe(pipefd) == -1) { /* 生成pipe */
perror("pipe");
exit(EXIT_FAILURE);
}
cpid = fork(); /* fork 生成子进程 */
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0) { /* 子进程,从PIPE读取 */
close(pipefd[1]); /* 关闭 不被使用的子进程的Write端 */
while (read(pipefd[0], &buf, 1) > 0){
write(STDOUT_FILENO, &buf, 1); /* 从子进程的Read端,读取文字列 */
}
write(STDOUT_FILENO, "\n", 1); /* 文字列读取结束后,追加换行符 */
close(pipefd[0]); /* 读取写入后,关闭子进程pipe的Read端 */
_exit(EXIT_SUCCESS); /* 这个子进程立即终了,并向父进程发送SIGCHLD信号 */
} else { /* 父进程将argv[1]向PIPE中写入 */
close(pipefd[0]); /* 关闭 不被使用的父进程的Read端 */
write(pipefd[1], argv[1], strlen(argv[1]));
close(pipefd[1]); /* 写入后,父进程的Write端关闭 */
wait(NULL); /* 等待子进程的状态变化,
如:子进程终了;由于信号,子进程的停止;由于信号,子进程的再开 */
exit(EXIT_SUCCESS); /* 父进程正常终了 */
}
}