totopper 发表于 2013-07-29 22:34

nginx的epoll_create的定义怎么是

int epoll_create(int size)
{
    return -1;
}

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
{
    return -1;
}

int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout)
{
    return -1;
}

这是什么情况呢???

linux_c_py_php 发表于 2013-07-29 23:21

去哪看的源码, 这是系统接口, Nginx怎么可能自己实现, 我grep了nginx源代码也没找到.

totopper 发表于 2013-07-30 07:15

回复 2# linux_c_py_php


    从nginx的官网下了一份nginx-0.5.38.tar.gz的源码看的...,额,看有些人说nginx没有用glibc库的epoll接口,但是为什么还要实现这种接口呢?

lolizeppelin 发表于 2013-07-30 10:41

http://blog.csdn.net/lengzijian/article/details/7609388

去看这个,有一些nginx源码解读

myworkstation 发表于 2013-07-30 11:42

回复 3# totopper


    谁说的nginx没有glibc的epoll接口的?nginx的epoll定义只是为了生成makefile时进行自动测试用的。也就说是这个代码是用在类似于./configure生成makefile进行特性的feature检测的。保证在没有epoll的系统上可以正常检测,检查过后真正使用的还是glib的接口。

下面的三个代码片段可以看明白这个关系。int epoll_create(int size)
{
    return -1;
}
ngx_feature="epoll"
ngx_feature_name="NGX_HAVE_EPOLL"
ngx_feature_run=yes
ngx_feature_incs="#include <sys/epoll.h>"
ngx_feature_path=
ngx_feature_libs=
ngx_feature_test="int efd = 0;
                  struct epoll_event ee;
                  ee.events = EPOLLIN|EPOLLOUT|EPOLLET;
                  ee.data.ptr = NULL;
                  efd = epoll_create(100);
                  if (efd == -1) return 1;"
. auto/feature

if [ $ngx_found = yes ]; then
    have=NGX_HAVE_CLEAR_EVENT . auto/have
    CORE_SRCS="$CORE_SRCS $EPOLL_SRCS"
    EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE"
    EVENT_FOUND=YES
fi
#include <sys/types.h>
$NGX_INCLUDE_UNISTD_H
$ngx_feature_incs

int main() {
    $ngx_feature_test;
    return 0;
}

END


ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS $ngx_feature_inc_path \
          -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_TEST_LD_OPT $ngx_feature_libs"

ngx_feature_inc_path=

eval "/bin/sh -c \"$ngx_test\" >> $NGX_AUTOCONF_ERR 2>&1"


if [ -x $NGX_AUTOTEST ]; then

    case "$ngx_feature_run" in

      yes)
            # /bin/sh is used to intercept "Killed" or "Abort trap" messages
            if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
                echo " found"
                ngx_found=yes

                if test -n "$ngx_feature_name"; then
                  have=$ngx_have_feature . auto/have
                fi

            else
                echo " found but is not working"
            fi
      ;;

      value)
页: [1]
查看完整版本: nginx的epoll_create的定义怎么是