在shell中执行echo $?可以返回刚刚结束的进程的返回值,如果找不到指定进程,返回的是127.其原理应该是将eax寄存器中的值输出。所以对于不同的处理器等,可能会有不同的细节效果。
errno是一个环境变量,在代码中先将其置为0,然后执行完毕以后,若函数执行出错,会将错误号赋值到errno中,为0则表示没有出错。
strerror可以将错误号转换成具体的出错信息,printf("%s",strerror(errno));就可以将错误信息输出。
上面的printf语句,可以直接用perror来代替,并且perror会自动加:并在结尾加\n,所以一般使用格式为perror("massage");
[cce_cpp] #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <fcntl.h>//O_RDWR int main() { int fd; errno=0; fd = open("/home/pi/test.txt",O_RDWR); if(fd == -1) { perror("failed"); printf("No.:%d massage:%s\n",errno,strerror(errno)); //exit(1); } close(fd); return 0; } [/cce_cpp]
执行结果:
failed: No such file or directory
No.:2 massage:No such file or directory