为什么open()失败并且没有设置errno?

Jee*_*tel 1 c linux file-io errno linux-kernel

在我的代码open()失败,返回代码为-1,但不知何故errno没有得到设置.

int fd;
int errno=0;
fd = open("/dev/tty0", O_RDWR | O_SYNC);
printf("errno is %d and fd is %d",errno,fd);
Run Code Online (Sandbox Code Playgroud)

输出是

errno is 0 and fd is -1
Run Code Online (Sandbox Code Playgroud)

为什么没有设置errno?我如何确定open()失败的原因?

cni*_*tar 12

int errno=0;
Run Code Online (Sandbox Code Playgroud)

问题是你重新申报errno,从而影响全局符号(甚至不需要是一个简单的变量).效果是open设置和设置的是不同的东西.相反,你应该包括标准errno.h.

  • 另外,不要做'errno = 0`.`open`无论如何都会正确设置它. (3认同)