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) );
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律