On Fri, May 17, 2013 at 11:00:36AM +0200, Peter van Hoof wrote:
> Dear users,
>
> I have been banging my head against the wall for some time to find a
> reliable and portable way to determine if a call to
> MPI::File::Open() was successful or not.
Sorry for the long delay in responding
In C, we do it like this:
static void handle_error(int errcode, char *str)
{
char msg[MPI_MAX_ERROR_STRING];
int resultlen;
MPI_Error_string(errcode, msg, &resultlen);
fprintf(stderr, "%s: %s\n", str, msg);
MPI_Abort(MPI_COMM_WORLD, 1);
}
errcode = MPI_File_open(MPI_COMM_SELF, filename,
MPI_MODE_CREATE | MPI_MODE_RDWR, MPI_INFO_NULL,
&fh);
if (errcode != MPI_SUCCESS) handle_error(errcode, "MPI_FILE_OPEN");
With the C++ bindings... ugh what a mess. I had to crack open the
yellow book to find out the answer. But on page 18 it's pretty
clear:
Quoting: C++ functions do not return error codes [...]
More Quoting: Advice to Users: C++ programmers that want to handle MPI
errors on their own should use th MPI::ERRORS_THROW_EXCEPTIONS error
handler, rather than MPI::ERROR_RETURN, which is used for that purpose
in C.
It's important to note that MPI-IO routines *do* use ERROR_RETURN as
the error handler, so you will have to take the additional step of
setting that.
==rob
--
Rob Latham
Mathematics and Computer Science Division
Argonne National Lab, IL USA