- 論壇徽章:
- 0
|
問題:
1 我建立了一對(duì)管道,
2. 用fork了一個(gè)子進(jìn)程,父進(jìn)程讀,子進(jìn)程寫。
3. 父進(jìn)程用epoll監(jiān)聽管道,
但是子進(jìn)程關(guān)閉寫端,或退出。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;
- }
復(fù)制代碼 |
|