0
當使用epoll_wait
時,它似乎「吃」寫入stdout
的所有內容並延遲打印,直到epoll_wait
收到事件後,儘管我在調用與epoll有關的任何內容之前嘗試打印(它甚至可能在我的主要方法的開始,它仍然不會被打印)。epoll_wait()塊打印到標準輸出
不會顯示epoll_wait
收到一個事件後,直到打印的例子:
printf("This doesn't get printed. ");
fprintf(stdout, "This doesn't get printed either.");
ev.events = EPOLLIN;
ev.data.fd = some_sock_fd; // Same with STDIN_FILENO
if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, some_sock_fd, &ev) == -1) {
perror("epoll_ctl");
exit(EXIT_FAILURE);
}
for (;;) {
rc = epoll_wait(epoll_fd, &ev, 1, -1);
// This is where it gets printed
寫stderr
作品爲正常,但我怎麼能寫stdout
?如何防止epoll_wait
阻止打印到stdout
?
不知道爲什麼會發生。但是你可以嘗試在打印語句後用'fflush(stdout);'顯式地清除stdout。或者用'setvbuf(stdout,NULL,_IONBF,0)'完全關閉緩衝。 – kaylum
謝謝,我實際上使用'setbuf(stdout,NULL)'(比'setvbuf'短)。 'fflush(stdout)'也適用。但我覺得這些解決方案是解決不了epoll阻塞stdout緩衝區的核心問題的解決方法。很高興知道這是否可以在epoll本身內解決。 –
epoll幾乎不會影響在epoll調用之前完成的輸出。 stdout是直接寫入tty設備還是重定向到管道或文件? –