我正在使用 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'。
我几乎没有睡觉和吃饭试图解决这个问题,但没有成功。我真的需要使用这个库。
任何帮助,将不胜感激。