Если вы ссылаетесь на code :: blocks, он действительно работает и в Linux. Используя #defines и определяя платформу, можно создать внешний интерфейс вспомогательной функции (который реализован для доступа к _flag в различных системах). Однако желательно указывать переносимость (это не прямое требование) - это сводит к минимуму любые изменения в коде при переносе.

ой вопрос:

Как проверить режим доступа к уже открытому указателю файла?

Допустим, функции передается уже открытый указатель FILE:

    //Pseudo code
    bool PseudoFunction(FILE *Ptr)
    {
        if( ... Insert check for read-only access rights )
        {
            //It's read only access mode
            return true;
        }
       //File pointer is not read-only and thus write operations are permitted
       return false;
    }

Что бы я использовал в операторе if, чтобы проверить, что указатель FILE был открыт как доступный только для чтения (или нет, в зависимости от обстоятельств), без записи в файл и без учета передачи пользователем (возможно, противоречащих) аргументов?

Система - это компилятор windows, code :: blocks, но для обеспечения переносимости кода предпочтительна перекрестная совместимость.

Обратите внимание, что речь идет не о правах на файл, а о том, какой режим доступа использовался указателем FILE.

SELF-ОТВЕТ [Невозможно добавить отдельный ответ из-за ограничений прав пользователя]:

Ниже приведен лучший ответ другого автора, который включает в себя правильные #defines

Как предполагалось ранее, кажется, что _flag указателя FILE (как определено в _iobuf) является ключом для того, чтобы узнать, доступен ли файл только для чтения. Ваш пробег может варьироваться, но та же базовая концепция должна легко адаптироваться, пример кода:

#define READ_ONLY_FLAG 1

bool PrintFlagPtr(const char FileName[], const char AccessMode[])
{
    FILE *Ptr = NULL;
    Ptr = fopen(FileName,AccessMode);
    printf("%s: %d ",AccessMode,Ptr->_flag);

    int IsReadOnly = Ptr->_flag;
    fclose(Ptr);
    Ptr = NULL;


    if( (IsReadOnly&READ_ONLY_FLAG) == READ_ONLY_FLAG )
    {
        printf("File is read only!\n");
        return true;
    }

    printf("\n");
    return false;
}

Это, когда все различные комбинации режимов доступа используются с вышеупомянутой функцией, производит вывод:

Output:
w: 2
r: 1 File is read only!
a: 2
wb: 2
rb: 1 File is read only!
ab: 2
w+: 128
r+: 128
a+: 128
w+b: 128
r+b: 128
a+b: 128

Мне любопытно, почему это никогда не предлагалось (или никогда не использовалось), учитывая кросс-совместимую интерфейсную функцию (просто функцию с тем же именем, с объявлениями, зависящими от платформы), передающую const int, полученную из указанного указателя FILE _flag будет довольно простым и легким решением проблемы.

Ответы на вопрос(2)

Ваш ответ на вопрос