Por que a fclose (NULL) da glibc causa falha de segmentação em vez de retornar erro?
De acordo com a página manfclose(3)
:
VALOR DE RETORNO
Após a conclusão bem-sucedida, 0 é retornado. De outra forma,EOF
é retornado e a variável globalerrno
está definido para indicar o erro. Em qualquer caso, qualquer acesso adicional (incluindo outra chamada parafclose()
) para o fluxo resulta em comportamento indefinido.
ERROS
EBADF
O descritor de arquivo subjacentefp
não é válido.
ofclose()
função também pode falhar e definirerrno
para qualquer um dos erros especificados para as rotinasclose(2)
, write(2)
oufflush(3)
.
Clarofclose(NULL)
deve falhar, mas espero que ele retorne com umerrno
normalmente em vez de morrer por falha de segmentação diretamente. Existe algum motivo desse comportamento?
Desde já, obrigado.
ATUALIZAÇÃO: vou colocar meu código aqui (estou tentandostrerror()
, particularmente).
FILE *not_exist = NULL;
not_exist = fopen("nonexist", "r");
if(not_exist == NULL){
printError(errno);
}
if(fclose(not_exist) == EOF){
printError(errno);
}