Cada llamada al sistema que falla actualiza el errnovalor.
Por lo tanto, puede tener más información sobre lo que sucede cuando ifstreamfalla una apertura usando algo como:
cerr << "Error: " << strerror(errno);
Sin embargo, dado que cada llamada al sistema actualiza el errnovalor global , es posible que tenga problemas en una aplicación multiproceso si otra llamada al sistema desencadena un error entre la ejecución f.openy 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 ...