关于系统调用函数 creat 的使用及其错误处理

发布时间 2023-06-18 00:19:59作者: 蔡依林别吸我

creat   :系统调用函数,可以创建一个文件

  int  creat( const char* pathname , mode_t  mode);     第一个参数是目录路径及其名字,第二个参数是权限  例子  creat("./a.txt",00400);

权限可以是系统定义的宏,也可以是四/五位的八进制数  读:4     写:2    执行 :1

系统定义的宏 :S_IRUSR       S_IWUSR      S_IXUSR   S_IRWXU        

八进制数         : 00400           00200             00100         00700

creat这个函数只能对用户自己的权限进行修改,无法对其所在组和其他人的权限进行修改

返回值类型,出错返回 -1 ,成功返回系统为其分配的文件描述符、文件操作符  从整数 3 开始,  因为 标准输入stdin,标准输出stdout,标准错误stderr分别占用了文件操作符0,1,2

 

如果创建失败先返回 -1,并且会把一些错误的值置在系统全局变量errno里面(使用errno之前需要写头文件#include<errno.h>);但是其中错误类型可以是很多,

常见的是 EINVAL:函数参数错误

                EISDIR:   要创建的文件名和目标路径下的目录同名

1.   可以同过监视系统全局变量 errno 来判断错误类型    (#include<errno.h>)            危害:  全局使用全局变量,工作量大; 全局变量存在危害,手动检测异常

      int fp = creat(argv[1],00400);

   if ( fp == -1)

 {   

     if(errno == EINVAL)

     printf("creat file error : value is invalid \n");

    else if(errno == EISDIR)

    printf("creat file error : Is a dir name\n");

 }

2.  使用perror(C库函数)

必须包含 全局变量errno 

头文件 #include<errno.h>

使用 :  

  if ( fp == -1)

 {   

 perror(“creat error !”);

 }

不需要加 \n 

他会自己判断error类型并且在  !末尾打印错误信息  

3. 使用 strerror( errno); (C库函数)

  头文件 #include<string.h>    是不是也要加个#include<errno.h>,因为使用了系统i全局变量errno

例子

  if ( fp == -1)

 {   

    printf("%s\n",strerror(errno) );

 }