Cada llamada al sistema que falla actualiza el errno
valor.
Por lo tanto, puede tener más información sobre lo que sucede cuando ifstream
falla una apertura usando algo como:
cerr << "Error: " << strerror(errno);
Sin embargo, dado que cada llamada al sistema actualiza el errno
valor global , es posible que tenga problemas en una aplicación multiproceso si otra llamada al sistema desencadena un error entre la ejecución f.open
y el uso de errno
.
En sistema con estándar POSIX:
errno es un subproceso local; ponerlo en un hilo no afecta su valor en ningún otro hilo.
Editar (gracias a Arne Mertz y otras personas en los comentarios):
e.what()
Al principio parecía ser una forma más C ++ - idiomáticamente correcta de implementar esto, sin embargo, la cadena devuelta por esta función depende de la implementación y (al menos en libstdc ++ de G ++) esta cadena no tiene información útil sobre la razón detrás del error ...