遇到APR失败

时间:2012-12-20 16:42:01

标签: c epoll apr

我正在使用libapr,但是它们的一些基本原语似乎运行不正常,呈现出一种非常奇怪的行为。这是我写的代码:

    pr_pool_t *mp=NULL;
    apr_file_t *fp = NULL;
    apr_pollset_t *pollset=NULL;
    apr_pollfd_t file_fd;

    /*apr initialization*/
    CuAssertIntEquals(ct,0,apr_initialize());
    CuAssertIntEquals(ct,0,apr_pool_create(&mp,NULL));

    /*opens file to test poll*/
    CuAssertIntEquals(ct,0,apr_file_open(&fp, FILENAME,
            APR_FOPEN_WRITE | APR_FOPEN_CREATE | APR_FOPEN_READ,
            APR_FPROT_UREAD|APR_FPROT_UWRITE|APR_FPROT_UEXECUTE , mp));

    /*creates pollset*/
    CuAssertIntEquals(ct,0,apr_pollset_create(&pollset, 10,mp,0));

    /*prepares poll fd...*/
    file_fd.desc_type = APR_POLL_FILE;
    file_fd.reqevents = APR_POLLIN|APR_POLLOUT;
    file_fd.desc.f = fp;
    file_fd.client_data = fp;

    /*adds pollfd to pollset*/
    CuAssertIntEquals(ct,0,apr_pollset_add(pollset, &file_fd));

一切运行良好,直到我到达apr_pollset_add(pollset,& file_fd),它失败并返回值1.

如果你分析这个函数的源代码,你会发现它永远不会返回1.实际上1是作为系统错误返回的,使用libapr例程apr_sterror被转换为:'operation not allowed'。

我几乎没有睡觉,吃着试图解决这个问题,但没有成功。我真的需要使用这个库。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我发现了问题。

我正在查看常规文件。常规文件is always ready be read or written

1对应于调用poll_ctl时设置的不允许的操作。