关于ev_default_fork的libev旗帜

时间:2012-08-01 11:32:30

标签: c++ c io fcntl libev

我正在学习libev。 但我不了解ev_default_fork的{​​{1}}标志。 这是一个近在咫尺的问题吗?像ev_loop标志一样吗? 什么时候我需要设置旗帜?哪种情况下这个标志是必要的? 这是对doc的描述:

  

此函数设置一个标志,该标志会导致后续的ev_loop迭代   重新初始化具有一个后端的内核状态。尽管   那么,你可以随时调用它,但之后最有意义   分叉,在儿童过程中(或儿童和父母,但再次   做得很少)。在使用任何之前,您必须在孩子中调用它   libevfunctions,它只会在下一个ev_loop生效   迭代。

     

另一方面,你只需要调用此函数   childprocess当且仅当您要在中使用事件库时   儿童。如果只是fork + exec,你根本不需要调用它。

     

功能本身非常快,通常也不是问题   callit以防万一。为了简化这个功能,该功能将会   很好地适应了对pthread_atfork的调用:pthread_atfork(0,   0,ev_default_fork);

1 个答案:

答案 0 :(得分:2)

那么请阅读文档,在fork()之后调用孩子中的函数,最好是你做的第一件事。所以你的代码应该是这样的:

switch (fork()) {
case -1:
    /* everything's gone pear-shaped */

default:
    /* i am the parent */
    ...
    break;

case 0:
    /* i am the child */
    ev_loop_fork(EV_DEFAULT);
    ...
    break;
}