Linux系统编程——文件的打开及创建

news2024/11/26 20:44:51

打开(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);

函数定义的参数解读

1.pathname:指向文件的路径

指定文件格式:./文件夹名字/指定文件名字

当前文件格式:./当前文件名字

2.flags:文件权限(分为两种情况)

第一种:(只能选择并执行其中一个)

1、O_RDONLY 只读打开
 2、O_WRONLY 只写打开
3、O_RDWR 可读可写打开

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

第二种:(可以选择多种同时进行)

注:在执行第二种时,其格式是与第一种并在一起,两者中间需要加一个 '|'

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

fd = open("./file1",O_RDWR|O_CREAT,0600);//fd为open的文件描述符,如果没有该文件,则创建一个新的文件并打开

2.O_EXCL:如果同时指定了O_CREAT,而文件已经存在,则出错(返回-1)。示例:

fd=open("./file1",O_RDWR|O_CREAT|O_EXCL,0600);//fd为open返回的文件描述符,此时若已经存在file1,open返回-1

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

fd=open("./file1",O_RDWR|O_APPEND);//此时可将原file1文件里的信息先删除后写入

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

fd=open("./file1",O_RDWR|O_TRUNC);//此时可将原file1文件里的信息先删除后写入

3.mode

mode是文件的创建模式,其执行功能有5种,分别是:

可执行:0100
可写:0200
可读:0400
可读、写:0600
可读、可写、可执行:0700

读的符号是r,数值为4;写的符号是w,数值为2;执行的符号是x,数值为1。其中共有4位数,而mode的创建模式执行的功能取决于第2位的数值(几种数值本身的数或者和)。对0600解析即:文件的所有者(用户)对文件file1的权限。

注:mode一定是在flags中使用了O CREAT标志,mode记录待创建的文件的访问权限。

文件描述符

执行一个程序时可能会打开很多文件,而对多个文件的操作需要进行区别,我们需要指定某个文件进行指定操作,这个时候就需要一个区分标志来辨别,即文件描述符。当一个文件被打开时,系统会产生一个结构体来储存文件中的各种信息,此时文件描述符指向这些信息。同时open函数的返回值就是一个文件描述符,其返回值是一个较小的非负整数

代码展示

文件存在:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

int main()
{
	int fd;//定义一个文件描述符
	
	fd = open("./file1",O_RDWR);//open函数的返回值给文件描述符
	printf("fd = %d\n",fd);//输出文件描述符的值
	return 0;
}

文件不存在:

创建(creat)

与open函数一样需包含以下三个头文件

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

creat的函数定义格式

int creat(const char *pathname,mode_t mode);

与open函数一样,返回值也是文字描述符。返回值也是一个较小的非负整数。

函数定义的参数解读

1.pathname:指向文件的路径

2.mode

mode是文件的创建模式,这里与open函数的mode有区别,这里的创建模式为系统自带。

可执行:S_IXUSR
可写:S_IWUSRL
可读:S_IRUSR
可读、可写、可执行:S_IRWXU

代码展示

结合open函数:

#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("./file1",O_RDWR|O_CREAT,0600);//创建一个可读可写可执行的文件
		if(fd > 0)//输出非负整数
		{
			printf("creat file1 success\n");//提示创建成功并打开
		}
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一篇带你精通php

华子目录 什么是phpphp发展史平台支持和数据库支持网站静态网站和动态网站的区别静态网站动态网站的特点 关键名词解析服务器概念IP的概念域名DNS端口 web程序的访问流程静态网站访问流程动态网站访问流程 php标记脚本标记标准标记&#xff08;常用&#xff09; php注释 什么是…

PDF有限制密码,不能复制怎么办?

大家现在接触PDF文件越来越多&#xff0c;有的时候在网上下载的PDF文件打开之后&#xff0c;发现选中文字之后无法复制。甚至其他功能也都无法使用&#xff0c;这是怎么回事&#xff1f;该怎么办&#xff1f; 当我们发现文件打开之后&#xff0c;编辑功能无法使用&#xff0c;很…

代码审计(某个人发卡系统V6.0(php))

一、前台漏洞 1、前台文件包含漏洞(如果开启了gbc,可远程包含) 注入点1&#xff1a; tyid没任何过滤&#xff0c;存在注入 payload:http://faka.com/ajax.php?actselgo POST传参: tyid1/**/union/**/select/**/*/**/from/**/if_km/**/limit/**/0,1# 注入点2: 也是没加任何…

10-Docker-分布式存储算法

01-哈希取余算法分区 哈希取余分区&#xff08;Hash Modulus Partitioning&#xff09;是一种在分布式计算和数据存储中常用的分区策略&#xff0c;其目的是将数据或计算任务分配到多个节点或服务器上&#xff0c;以实现负载均衡和提高性能。这种分区策略的核心思想是使用哈希…

Python---列表的循环遍历,嵌套

循环遍历就是使用while或for循环对列表中的每个数据进行打印输出 while循环&#xff1a; list1 [貂蝉, 大乔, 小乔]# 定义计数器 i 0 # 编写循环条件 while i < len(list1):print(list1[i])# 更新计数器i 1 for循环&#xff08;推荐&#xff09;&#xff1a; list1 [貂…

小白学安全-KunLun-M静态白盒扫描工具

一、KunLun-M简介 KunLun-M是一个完全开源的静态白盒扫描工具&#xff0c;支持PHP、JavaScript的语义扫描&#xff0c;基础安全、组件安全扫描&#xff0c;Chrome Ext\Solidity的基础扫描。开源地址&#xff1a;https://github.com/LoRexxar/Kunlun-M Cobra是一款源代码安全审计…

springboot中定时任务cron不生效,fixedRate指定间隔失效,只执行一次的问题

在调试计算任务的时候&#xff0c;手动重置任务为初始状态&#xff0c;但是并没有重新开始计算&#xff0c;检查定时任务代码&#xff1a; 从Scheduled(fixedRate 120000)可以看到&#xff0c;应该是间隔120秒执行一次该定时任务&#xff0c;查看后台日志&#xff0c;并没有重…

追寻Moonbeam身影,泰国区块链周正在火热进行中!

继Moonbeam参与HK Web3月之后&#xff0c;下一站便是由Cryptomind Group举办的泰国2023年区块链周。本次位于泰国的区块链周以“熊市中建设&#xff0c;牛市中崛起”为理念&#xff0c;旨在为对区块链技术感兴趣的个人和投资者提供机会接触行业中的团队和专家&#xff0c;并邀请…

跨境虾皮Shopee和Lazada商品详情接口采集方案

跨境虾皮和Lazada商品详情接口采集方案可以采用以下步骤&#xff1a; 了解接口文档&#xff1a;首先需要了解跨境虾皮和Lazada的商品详情接口文档&#xff0c;包括接口地址、请求参数、返回结果等信息。获取API密钥&#xff1a;为了使用API接口&#xff0c;需要获取跨境虾皮和…

五个做原型的好处和意义

绘制原型不仅是产品开发的重要基础&#xff0c;也是UI设计师在设计过程中应该采用的主要路径标识。绘制原型的重要性不亚于建筑师手中的设计图纸&#xff01;虽然原型设计可能会给产品开发带来一些误解&#xff0c;但毫不夸张地说&#xff0c;任何开发人员都可以将优秀的开发产…

将Modbus转Profinet网关用于自动给料机的案例

自动给料机通过使用Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;连接1200PLC与G120变频器Modbus通信。这种通信方式可以实现设备之间的数据交换和控制命令传输&#xff0c;大大提高了自动给料机的运行效率和精度。使用这个网关&#xff0c;1200PLC可以准确地将控制…

13 # 手写 concat 方法

concat 的使用 concat() 方法用于合并两个或多个数组。此方法不会更改现有数组&#xff0c;而是返回一个新数组。如果省略了所有参数&#xff0c;则 concat 会返回调用此方法的现存数组的一个浅拷贝。 <script>var arr1 ["k", "a", "i"…

ES|QL(Elasticsearch 查询语言)入门

作者&#xff1a;Ninoslav Miskovic 通过使用 ES|QL 直接从 Discover 创建聚合、可视化和警报&#xff0c;缩短获得见解的时间。 什么是 ES|QL&#xff08;Elasticsearch 查询语言&#xff09;&#xff1f; ES|QL&#xff08;Elasticsearch 查询语言&#xff09;是 Elastic 全…

文件包含 [ZJCTF 2019]NiZhuanSiWei1

打开题目 代码审计 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ 首先isset函数检查text参数是否存在且不为空 用file_get_contents函数读取text制定的文件内容并与welcome to the zjctf进行强比较 echo "<br><h…

ByteBuf和ByteBuffer

一、背景简介 ByteBuf&#xff0c;顾名思义&#xff0c;就是字节缓冲区&#xff0c;是Netty中非常重要的一个组件。熟悉jdk NIO的同学应该知道ByteBuffer&#xff0c;正是因为jdk原生ByteBuffer使用比较复杂&#xff0c;某些场景下性能不是太好&#xff0c;netty开发团队重新设…

QT QSplitter

分裂器QSplitter类提供了一个分裂器部件。和QBoxLayout类似&#xff0c;可以完成布局管理器的功能,但是包含在它里面的部件,默认是可以随着分裂器的大小变化而变化的。 比如一个按钮放在布局管理器中,它的垂直方向默认是不会被拉伸的,但是放到分裂器中就可以被拉伸。还有一点不…

多篇论文介绍-摘要

论文地址https://arxiv.org/pdf/2301.10051.pdf 目录 01CIEFRNet&#xff1a;面向高速公路的抛洒物检测算法 02改进 YOLOv5 的 PDC 钻头复合片缺损识别 03 基于SimAM注意力机制的DCN-YOLOv5水下目标检测 04 基于改进YOLOv7-tiny 算法的输电线路螺栓缺销检测 ​编辑05 基于改进Y…

jquery的项目,html页面使用vue3 +element Plus

vue3&#xff0c;element引入 <script src"../vue3.3.8/vue.global.js"></script> <link rel"stylesheet" href"js/elementPlus/index.css"> <script src"js/elementPlus/index.full.js"></script>…

Linux友人帐之网络编程基础NFS服务器

一、概述 1.1NFS基础概念 NFS服务器&#xff08;Network File System&#xff09;是一种网络文件系统协议&#xff0c;它允许不同计算机之间共享文件系统中的文件。它是一种专门用于在网络上共享文件和目录的服务器。NFS服务器可以把本地的文件系统目录通过网络共享给其它计算…

【C++】——类与对象(一)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…