2012-12-20 27 views
0

我正在使用libapr,但他們的一些基本原語似乎不能很好地工作,呈現出非常奇怪的行爲。這是我寫的代碼:遇到APR失敗

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 permitted'。

我幾乎沒有睡覺,想吃解決這個問題,但沒有成功。我真的需要使用這個庫。

任何幫助,將不勝感激。

回答

相關問題