当前位置: 首页 > news >正文

Linux系统编程--文件编程--打开创建文件

创建文件需要包含以下3个头文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
打开、创建文件有以下3个API

open的返回值——文件描述符(索引作用),是一个小的非负整数

int open(const char*pathname,int flags);
int open(const char*pathname,int flags,mode_t mode);

int creat(const char*pathname,mode_t mode);
pathname 要打开的文件名(含路径,缺省为当前路径)

flags:权限:O_RDONLY只读打开, O_WRONLY只写打开, O_RDWR可读可写打开

当我们附带了权限后,打开的文件就只能按照这种权限来操作,以上3个常数中应当只指定1个。

下列常数是可选择的:

O_CREAT若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的存取许可权限。

O_EXCL如果同时指定了O_CREAT,而文件已存在,则出错。

O_APPEND每次写时都加到文件的尾端。

O_TRUNC属性去打开文件时,如果这个文件中本来时有内容的,而且为只读或只写成功打开,则将其长度截短为0.

mode:一定是flages中使用了O_CREAT标志,mode记录待创建的文件的访问权限。

代码实际演示:

1、创建1个demo1.c文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
int fd;
fd=open("./file1",O_RDWR);
printf("fd=%d\n",fd);
return 0;
}
编译运行输出fd=3,打开成功

第二次运行则fd=-1,表示打开失败

2、复制demo1.c为demo2.c

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
int fd;
fd=open("./file1",O_RDWR);
if(fd=-1){
printf("open file1 failed\n");
fd=open("./fail1",O_RDWR|O_CREAT,0600);
if(fd>0){
printf("creat file1 succse\n");
}
}
printf("fd=%d\n",fd);
return 0;
}

编译运行,结果为

open file1 failed
creat file1 succse
fd=3
发送命令ls,能看到多了一个file1文件

a.out demo1.c demo2.c fail1

ls -l(把所有文件清单列出)

-rwxr-xr-x 1 CLC book 8479 Apr 4 17:25 a.out
-rw-r--r-- 1 CLC book 169 Apr 4 17:07 demo1.c
-rw-r--r-- 1 CLC book 310 Apr 4 17:25 demo2.c
-rw------- 1 CLC book 0 Apr 4 17:25 fail1
-为普通文件,r为可读权限,w为可写权限,x为可执行权限

看fail1,为可读可写文件

文件权限一般分为3种:可读、可写、可执行

结合代码中mode=0600看:6=4+2(代表可读可写)

4为可读(r),2为可写(w),1为可执行(1)

0600,倒数第一位代表其他组,倒数第二位代表同组,倒数第三位是给文件所有者的权限

0700,表示可读写执行

http://www.lryc.cn/news/142929.html

相关文章:

  • http协议与apache
  • 搜索二叉树的算法解析与实例演示
  • 研磨设计模式day13组合模式
  • Linux命令(73)之zip
  • 深入理解Reactor模型的原理与应用
  • 微信小程序开发的投票评选系统设计与实现
  • 【校招VIP】算法考点之堆排
  • 关于yarn安装时报“node“ is incompatible with this module的解决办法
  • 开源利器推荐:美团动态线程池框架的接入分享及效果展示
  • Linux目录结构与文件管理 (02)(四)
  • 对1GHz脉冲多普勒雷达进行快速和慢速处理生成5个移动目标的距离多普勒图研究(Matlab代码实现)
  • uni.uploadFile上传 PHP接收不到
  • 2023年高教社杯 国赛数学建模思路 - 复盘:光照强度计算的优化模型
  • Netty简易聊天室
  • Flutter Cannot run with sound null safety, because the following dependencies
  • 利用改进的遗传算法(种群隔离与个体迁移)mpi并行解决tsp问题
  • 【C++】—— C++11之线程库
  • 前端面试:【性能优化】前端缓存、CDN、懒加载和预加载
  • 民族传统文化分享系统uniapp 微信小程序
  • netty(二):NIO——处理可写事件
  • PHP基本语法解析与应用指南
  • ICS PA1
  • Java学数据结构(4)——散列表Hash table 散列函数 哈希冲突
  • OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 论文阅读
  • 【安全】原型链污染 - Hackit2018
  • net.ipv4.ip_forward=0导致docker容器无法与外部通信
  • 软考高级系统架构设计师系列论文九十八:论软件开发平台的选择与应用
  • Springboot整合WebFlux
  • uniapp 实现地图距离计算
  • 破除“中台化”误区,两大新原则考核中后台