open打开文件失败的原因,Linux系统会去设置errno的值 (整型的全局变量)
perrno会根据errno值(整型的全局变量)打印对应的错误信息
其实 errno是一个错误编号,当错误发生时,每一个不同的错误都有一个编号,这个编号的值就会被存储在errno中,perrorh会根据这错误编号判断是什么错误发生了,并且打印对应的错误信息,打印错误信息的函数有perror(),strerror(),printf("%m")等。
打印错误信息
打印错误信息 / perror
void perror(const char *s)//打印系统错误信息
参数:
s: 字符串提示符
输出形式:
输出error值对应的错误信息
字符串显示错误信息 / strerror
函数原型:
char *strerror(int errnum);//将错误码以字符串的信息显示出来
参数:
errnum: 即errno
返回值:
返回错误码字符串信息
在讲解liunx错误处理机制之前我们先来看一段代码:
#include<sys/stat.h>
#include<unistd.h>
#include<sys/type.h>
#include<stdio.h>
#include<error.h>
int main(void){
int fd=open("test",O_WRONLY);//打开test文件,如果失败,系统会去设置全局变量error的值
if(fd<0){//打开失败
printf("error=%dn",error);//打印error 的值
perror("main open");//打印出错信息
}
printf("fd=%dn",fd);//打印文件 描述符的值
return 0;
}
解释说明:
这一段代码是用函数open打开一个名为test的文件,open()函数返回一个新的文件描述符,如果出现错误,则返回-1(在出现错误的情况下,errno要被做相应的设置)
我们上面的代码只是判断了open是否发生了错误,至于是什么错误无法判断。因为可以引起上述代码中open函数错误的原因比较多,例如文件test不存在,或者文件test存在,但是没有写的权限。这都会出现错误。那么要怎么样准确的判定是什么引起的open函数处错误的呢?当open函数出错时,不仅仅会返回一个-1,函数设置errno的值。那么errno是什么类型的呢?
是一个int类型的全局变量
#ifndef errno
extern int errno;
#endif