How to set errno value?

2019-02-07 19:37发布

问题:

I have two calls to two different methods :

void func1() 
{
  // do something 
  if (fail) 
  {
    // then set errno to EEXIST

  }

}

And the second method :

void func2() 
{
  // do something 
  if (fail) 
  {
    // then set errno to ENOENT

  }

}
  1. When I set the errno to some value , what does it do ? just error checking ?

  2. How can I set errno in the above methods func1 and func2 to EEXIST and ENOENT

Thanks

回答1:

For all practical purposes, you can treat errno like a global variable (although it's usually not). So include errno.h and just use it:

errno = ENOENT;

You should ask yourself if errno is the best error-reporting mechanism for your purposes. Can the functions be engineered to return the error code themselves ?



回答2:

IMO, the standard errno designed for system level. My experience is do not pollute them. If you want to simulate the C standard errno mechanism, you can do some definition like:

/* your_errno.c */
__thread int g_your_error_code;

/* your_errno.h */
extern __thread int g_your_error_code
#define set_your_errno(err) (g_your_error_code = (err))
#define your_errno (g_your_error_code)

and also you can still implement your_perror(err_code). More information, please refer to glibc's implementation.



回答3:

#include <errno.h>
void func1() 
{
  // do something 
  if (fail) 
  {
    errno = ENOENT;
  }
}