Operações de arquivo: Verifique o modo de acesso ao ponteiro de arquivo aberto

Uma pergunta simples:

Como verifico o modo de acesso de um ponteiro de arquivo já aberto?

Então, digamos que uma função tenha passado um ponteiro FILE já abert

    //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;
    }

O que eu usaria na instrução if para verificar se o ponteiro FILE havia sido aberto como somente leitura (ou não, conforme o caso), sem gravar no arquivo e sem depender dos argumentos de passagem (possivelmente contraditórios) do usuário ?

System é o compilador windows, code :: blocks, mas por interesse em portabilidade de código, é preferível a compatibilidade cruzad

ota, isso não está perguntando sobre os direitos de arquivo, mas qual modo de acesso foi usado pelo ponteiro FIL

AUTO-RESPOSTA [Não é possível anexar uma resposta separada devido a limitações de direitos do usuário]:

Existe uma resposta melhor por outro pôster abaixo, que inclui o número # define

Como sugerido anteriormente, parece que o _flag do ponteiro FILE (conforme definido em _iobuf) é a chave para saber se um arquivo é ou não somente leitura. Sua milhagem pode variar, mas o mesmo conceito básico deve ser facilmente adaptável, exemplo de código:

#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;
}

Isso, quando todas as combinações diferentes de modos de acesso são usadas com a função acima, produz uma saída de:

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

Estou curioso para saber por que isso nunca foi sugerido (ou nunca usado), dada uma função front-end compatível com cruzamentos (simplesmente uma função com o mesmo nome, com declarações dependendo da plataforma) passando uma const proveniente do FILE fornecido pointer _flag seria uma solução bastante simples e fácil para o problem

questionAnswers(3)

yourAnswerToTheQuestion