📄 child05.c
字号:
/* include child_make */#include "unp.h"#include "child.h"pid_tchild_make(int i, int listenfd, int addrlen){ int sockfd[2]; pid_t pid; void child_main(int, int, int); Socketpair(AF_LOCAL, SOCK_STREAM, 0, sockfd); if ( (pid = Fork()) > 0) { Close(sockfd[1]); cptr[i].child_pid = pid; cptr[i].child_pipefd = sockfd[0]; cptr[i].child_status = 0; return(pid); /* parent */ } Dup2(sockfd[1], STDERR_FILENO); /* child's stream pipe to parent */ Close(sockfd[0]); Close(sockfd[1]); Close(listenfd); /* child does not need this open */ child_main(i, listenfd, addrlen); /* never returns */}/* end child_make *//* include child_main */voidchild_main(int i, int listenfd, int addrlen){ char c; int connfd; ssize_t n; void web_child(int); printf("child %ld starting\n", (long) getpid()); for ( ; ; ) { if ( (n = Read_fd(STDERR_FILENO, &c, 1, &connfd)) == 0) err_quit("read_fd returned 0"); if (connfd < 0) err_quit("no descriptor from read_fd"); web_child(connfd); /* process request */ Close(connfd); Write(STDERR_FILENO, "", 1); /* tell parent we're ready again */ }}/* end child_main */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -