- 论坛徽章:
- 0
|
问题:
1 我建立了一对管道,
2. 用fork了一个子进程,父进程读,子进程写。
3. 父进程用epoll监听管道,
但是子进程关闭写端,或退出。epoll没事件返回给我。怎么办呢?- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/epoll.h>
- int main()
- {
- int fds[2];
- pid_t pid;
- pipe(fds);
- pid = fork();
- if (pid == 0) {
- /* child */
- sleep(2);
- close(fds[1]);
- close(fds[0]);
- printf("exit!\n");
- exit(0);
- } else if (pid > 0) {
- /* father */
- struct epoll_event ev, events[10];
- ev.data.fd = fds[0];
- ev.events = EPOLLIN|EPOLLOUT|EPOLLHUP;
- int epfd = epoll_create(10);
- epoll_ctl(epfd, EPOLL_CTL_ADD, fds[0], &ev);
- for (;;) {
- int ret = epoll_wait(epfd, events, 10, 3000);
- printf("epoll returns %d\n", ret);
- if (ret == 0) {
- close(fds[0]);
- close(fds[1]);
- continue;
- }
- int i = 0;
- for (i = 0; i < ret; i++) {
- if (events[i].events & EPOLLIN)
- printf("EPOLLIN");
- else if (events[i].events & EPOLLOUT)
- printf("EPOLLOUT");
- else if (events[i].events & EPOLLHUP)
- printf("EPOLLHUP");
- else
- printf("lsdkfsdlfksljf");
- printf("\n");
- }
- }
- }
- return 0;
- }
复制代码 |
|