Hello,

I quote from the SUSv3:

Many functions provide an error number in errno, which has type int and is
defined in <errno.h>. The value of errno shall be defined only after a
call to a function for which it is explicitly stated to be set and until
it is changed by the next function call or if the application assigns it a
value. The value of errno should only be examined when it is indicated to
be valid by a function's return value. Applications shall obtain the
definition of errno by the inclusion of <errno.h>. No function in this
volume of IEEE Std 1003.1-2001 shall set errno to 0. The setting of errno
after a successful call to a function is unspecified unless the
description of that function specifies that errno shall not be modified.

So in my understanding errno is only valid after you called a function
that explicitly set errno in case of an *error* and only if the function
returns an error indicator. In your example you call MPI_Init() which the
manpage says nothing about errno and therefor the errno value is
unspeciefied after the call and has no meaning.

Bert

Chudin, Eugene wrote:
> I am trying to experiment with openmpi and following trivial code
> (although runs) affects value of errno
> 
> #include <cerrno>
> #include <mpi.h>
> 
> 
> int main(int argc, char** argv)
> {
>      int _procid, _np;
>      std::cout << "errno=\t" << errno << std::endl;
>      MPI_Init(&argc, &argv);
>      std::cout << "errno=\t" << errno << "\tafter MPI_Init()\t" <<
> std::endl;
>      MPI_Comm_rank (MPI_COMM_WORLD, &_procid);
>      MPI_Comm_size (MPI_COMM_WORLD, &_np);
>      std::cout << "errno msg=\t" << strerror(errno) << "\tprocessor=\t"
> << _procid << std::endl;
>      MPI_Finalize();
>      return 0;
> }
> 
> Compiled with
> mpiCC -Wall test.cpp -o test
> 
> Produces following output when run just on single processor using
> mpirun -np 1 --prefix /toolbox/openmpi  ./test
> errno=  0
> errno=  2       after MPI_Init()
> errno msg=      No such file or directory       processor=      0
> 
> When run on two processors using
> mpirun -np 2 --prefix /toolbox/openmpi  ./test
> errno=  0
> errno=  0
> errno=  11      after MPI_Init()
> errno=  115     after MPI_Init()
> errno msg=      Operation now in progress       processor=      0
> errno msg=      Resource temporarily unavailable        processor=      1
> 
> The output of ompi_info --all is attached
> 
> <<ompi_info.txt>>
> 
> 
> ------------------------------------------------------------------------------
> Notice:  This e-mail message, together with any attachments, contains
> information of Merck & Co., Inc. (One Merck Drive, Whitehouse Station,
> New Jersey, USA 08889), and/or its affiliates (which may be known
> outside the United States as Merck Frosst, Merck Sharp & Dohme or MSD
> and in Japan, as Banyu - direct contact information for affiliates is 
> available at http://www.merck.com/contact/contacts.html) that may be 
> confidential, proprietary copyrighted and/or legally privileged. It is 
> intended solely for the use of the individual or entity named on this 
> message. If you are not the intended recipient, and have received this 
> message in error, please notify us immediately by reply e-mail and then 
> delete it from your system.
> 
> ------------------------------------------------------------------------------
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users

Reply via email to