我在學習libev
。 但我不明白ev_loop
的標誌ev_default_fork
。 這是一個關於exec的問題嗎?像FD_CLOEXEC fcntl()
標誌嗎? 當我需要設置標誌?哪種情況下這個標誌是必要的? 此文檔的描述:關於ev_default_fork的libev國旗
該功能設定使後續ev_loop iterationsto 重新初始化內核狀態具有一個後端的標誌。儘管 名字,你可以隨時調用它,但它最有意義後 分叉,在子進程(或兒童和父母,但再次 使littlesense)。在使用任何自由函數之前,必須在孩子中調用它,它只會在下一次ev_loop 迭代中生效。
另一方面,當且僅當您想要使用 孩子中的事件庫時,您只需要在 子進程中調用此函數。如果你只是fork + exec,你根本不需要調用它。
該功能本身相當快,通常不會出現問題 以防叉後出現。爲了方便起見,函數 fit會很好地調用pthread_atfork:pthread_atfork(0, 0,ev_default_fork);
爲什麼要這樣?如果我沒有寫ev_default_fork(),會發生什麼? – simon 2012-08-01 13:02:29
這個ev_default_fork()工作像FD_CLOEXEC fcntl()標誌嗎? – simon 2012-08-01 13:04:54
不,這和FD_CLOEXEC沒有關係。 'ev_default_fork()'只是做了一些內部的技巧,所以默認的**循環**可以用在孩子身上。我的意思是,所有向父母登記的事件都將繼續與孩子一起工作。如果你不這樣做,那麼默認循環在隊列中有不可用的事件。 – hroptatyr 2012-08-01 13:08:10