Cada chamada de sistema que falha atualiza o errno
valor.
Assim, você pode ter mais informações sobre o que acontece quando uma ifstream
abertura falha usando algo como:
cerr << "Error: " << strerror(errno);
No entanto, como cada chamada de sistema atualiza o errno
valor global , você pode ter problemas em um aplicativo multithread se outra chamada de sistema disparar um erro entre a execução de f.open
e o uso de errno
.
No sistema com padrão POSIX:
errno é thread local; configurá-lo em um thread não afeta seu valor em nenhum outro thread.
Editar (obrigado a Arne Mertz e outras pessoas nos comentários):
e.what()
parecia a princípio ser uma forma mais C ++ - idiomicamente correta de implementar isso, no entanto, a string retornada por esta função é dependente da implementação e (pelo menos no libstdc ++ do G ++) esta string não tem informações úteis sobre o motivo do erro ...