(1)open函数
man man 查看man文档的首页 其中DESCRIPTION部分描述了man文档的每一章的章节内容 第2章System calls为系统调用,即Liunx系统函数。 man 2 open 查看第二章的open函数的详细帮助文件。
open函数用于打开一个已经的文件或者创建一个没有的文件,其详细描述如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> //open函数对应了三个头文件
int open(const char *pathname, int flags); //打开一个已有的文件
int open(const char *pathname, int flags, mode_t mode); //文件不存在,创建一个新的文件
pathname为打开文件的路径 mode_t为文件权限的类型,如:777 764等 flags参数用于指定打开文件的方式:O_RDONLY(只读)、O_WRONLY(只写)或O_RDWR(读写),这三个参数是互斥的。flags还可以是:O_CLOEXEC, O_CREAT, O_DIRECTORY, O_EXCL, O_NOCTTY, O_NOFOLLOW, O_TRUNC和 O_TTY_INIT。当采用上述第二个open函数(有三个参数)创建一个文件时,flags需指定为O_CREAT(O_RDWR | O_CREAT)。mode_t为创建的文件指定一个权限。
open函数的返回值。其返回值为打开或创建文件的文件描述符(无符号整数)。如果返回值为-1(EOF),则说明在打开或创建文件时发生了错误(打开或创建文件失败),在这种情况下(函数调用失败),详细的错误信息保存在全局变量errno中,可以进行查看。
(2)errno全局变量
errno全局变量,是记录系统的最后一次错误代码(整数值,会被覆盖),为int类型。errno全局变量定义在头文件/usr/include/errno.h中,该文件有: extern int errno; 即是对全局变量的声明。在程序启动时,errno 设置为零(未初始化全局变量),C 标准库中的特定函数修改它的值为一些非零值以表示某些类型的错误。您也可以在适当的时候修改它的值或重置为零。注意:在使用errno变量时,仅需要包含头文件errno.h即可。
errno的代码值(整型值)都进行了宏定义,其定义在两个头文件中:/usr/include/asm-generic/errno-base.h(1~34)和 /usr/include/asm-generic/errno.h(35~133)。如下图所示:
上图中最后面的注释部分表示该代码值所对应的具体是哪一种错误类型。每个errno值对应着以字符串表示的错误类型,当调用“某些”函数出错时,该函数会重新设置 errno 的值。为了查看errno代码值对应的详细错误,需要使用perror函数,其功能如下图:
perror函数在头文件stdio.h中声明,其将errno代表的详细错误类型输出到标准错误流(文件描述符为2),如显示到屏幕上。其参数s所指的字符串是用户自己输入的,以提示用户这是属于哪一个操作的错误。