By default, communication errors are fatal--- MPI_ERRORS_ARE_FATAL is the default error handler associated with MPI_COMM_WORLD. I/O errors are usually less catastrophic (e.g., ``file not found'') than communication errors, and common practice is to catch these errors and continue executing. For this reason, MPI provides additional error facilities for I/O.
Advice to users.
MPI does not specify the state of a computation after an erroneous
MPI call has occurred. A high quality implementation will support
the I/O error handling facilities, allowing users to write programs using
common practice for I/O.
( End of advice to users.)
Like communicators, each file handle has an error handler associated with it. The MPI-2 I/O error handling routines are defined in Section Error Handlers .
When MPI calls a user-defined error handler resulting from an error on a particular file handle, the first two arguments passed to the file error handler are the file handle and the error code. For I/O errors that are not associated with a valid file handle (e.g., in MPI_FILE_OPEN or MPI_FILE_DELETE), the first argument passed to the error handler is MPI_FILE_NULL,
I/O error handling differs from communication error handling in another important aspect. By default, the predefined error handler for file handles is MPI_ERRORS_RETURN. The default file error handler has two purposes: when a new file handle is created (by MPI_FILE_OPEN), the error handler for the new file handle is initially set to the default error handler, and I/O routines that have no valid file handle on which to raise an error (e.g., MPI_FILE_OPEN or MPI_FILE_DELETE) use the default file error handler. The default file error handler can be changed by specifying MPI_FILE_NULL as the fh argument to MPI_FILE_SET_ERRHANDLER. The current value of the default file error handler can be determined by passing MPI_FILE_NULL as the fh argument to MPI_FILE_GET_ERRHANDLER.
Rationale.
For communication, the default error handler is inherited
from MPI_COMM_WORLD.
In I/O, there is no analogous ``root'' file handle
from which default properties can be inherited.
Rather than invent a new global file handle,
the default file error handler is manipulated as if
it were attached to MPI_FILE_NULL.
( End of rationale.)