Как я могу создать файл, используя apr_file_open () - PullRequest
3 голосов
/ 14 июня 2011

Я выполняю следующий вызов из библиотеки Apache Portable Runtime (версия 1.4):

result = apr_file_open(
    &file, // new file handle
    pathname, // file name          
    APR_FOPEN_CREATE | // create file if not there 
    APR_FOPEN_EXCL | // error if file was there already
    APR_FOPEN_APPEND | // move to end of file on open
    APR_FOPEN_BINARY | // binary mode (ignored on UNIX)
    APR_FOPEN_XTHREAD | // allow multiple threads to use file
    0, // flags
    APR_OS_DEFAULT |
    0, // permissions
    pool // memory pool to use
);

if ( APR_SUCCESS != result ) {
    fprintf(
        stderr,
        "could not create file \"%s\": %s",
        pathname,
        apr_errorstr( result )
    );
}

и pathname содержит строку /tmp/tempfile20110614091201.

Я получаю сообщение об ошибке «Отказано в доступе» (код результата APR_EACCES), но у меня есть права на чтение / запись /tmp - что может быть причиной этого?

1 Ответ

3 голосов
/ 14 июня 2011

Мне нужен флаг APR_FOPEN_WRITE.Я ошибочно предположил, что флага APR_FOPEN_APPEND достаточно.

Итак, сработал вызов:


    result = apr_file_open(
        &file, // new file handle
        pathname, // file name          
        APR_FOPEN_CREATE | // create file if not there 
        APR_FOPEN_EXCL | // error if file was there already
        <b>APR_FOPEN_WRITE | // open for writing</b>
        APR_FOPEN_APPEND | // move to end of file on open
        APR_FOPEN_BINARY | // binary mode (ignored on UNIX)
        APR_FOPEN_XTHREAD | // allow multiple threads to use file
        0, // flags
        APR_OS_DEFAULT |
        0, // permissions
        pool // memory pool to use
    );
...