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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言 变量

C 变量 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型&#xff0c;类型决定了变量存储的大小和布局&#xff0c;该范围内的值都可以存储在内存中&#xff0c;运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下…

POI.5.2.4常用操作-数据导入导出常规操作

1、APACHE POI简介 Apache POI 简介是用Java编写的免费开源的跨平台的 Java API&#xff0c;Apache POI提供API给Java程式对Microsoft Office&#xff08;Excel、WORD、PowerPoint、Visio等&#xff09;格式档案读和写的功能。 1.1、其他操作Excel工具 Java Excel是一开放源码…

pda超高频RFID工业手持终端,远距离多标签读取神器

RFID技术的基本原理是通过射频信号进行通信。RFID系统由两部分组成&#xff0c;一是RFID读写器&#xff0c;二是RFID标签。读写器通过发送射频信号&#xff0c;激活标签&#xff0c;并从标签中读取存储的数据。标签可以附着在物品上&#xff0c;并携带物品的相关信息。当物品通…

Codeforces Round 908 (Div. 2)题解

目录 A. Secret Sport 题目分析: B. Two Out of Three 题目分析: C. Anonymous Informant 题目分析: A. Secret Sport 题目分析: A,B一共打n场比赛&#xff0c;输入一个字符串由A和‘B’组成代表A赢或者B赢&#xff08;无平局&#xff09;&#xff0c;因为题目说明这个人…

迅为龙芯3A5000主板,支持PCIE 3.0、USB 3.0和 SATA 3.0显示接口2 路、HDMI 和1路 VGA,可直连显示器

性能强 采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统 (LoongArch)的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。 桥片 桥片采用龙芯 7A2000&#xff0c;支持PCIE 3.0、USB 3.0和 SATA 3.0显示接口2 路、HDMI 和1路 …

9 网关的作用

1、总结&#xff1a; 1.如果离开本局域网&#xff0c;就需要经过网关&#xff0c;网关是路由器的一个网口。 2.路由器是一个三层设备&#xff0c;里面有如何寻找下一跳的规则 3.经过路由器之后 MAC 头要变&#xff0c;如果 IP 不变&#xff0c;相当于不换护照的欧洲旅游&#…

HBase学习笔记(1)—— 知识点总结

目录 HBase概述 HBase 基本架构 HBase安装部署启动 HBase Shell HBase数据读写流程 HBase 优化 HBase概述 HBase是以 hdfs 为数据存储的&#xff0c;一种分布式、非关系型的、可扩展的 NoSQL 数据库 关系型数据库和非关系型数据库的区别&#xff1a; 关系型数据库和非关…

UT代码编译至build文件夹

得克萨斯大学奥斯汀分校代码&#xff1a;代码文件按照网上很多的做法是直接**cmake .****make**则会出现以下的内容&#xff1a;但是这样做未免有些杂乱&#xff0c;会将编译生成的Makefile和其他数据文件全部存放在utaustinvilla3d-master下&#xff0c;比较杂乱。根据我们编译…

Linux--gcc与make

文章目录 gcc/g的使用背景知识gcc与ggcc的编译过程预处理编译汇编链接 函数库自动化构建工具--make三个时间伪目标文件其他表示方法mybin的推导过程 gcc/g的使用 背景知识 GCC是一个开源的编译器套件&#xff0c;支持多种编程语言&#xff0c;并提供了广泛的语言特性和标准库…

C++入门学习(4)引用 (讲解拿指针比较)

上期回顾 在学习完函数重载之后&#xff0c;我们可以使用多个重名函数进行操作&#xff0c;会发现C真的是弥补了好多C语言的不足之处&#xff0c;真的不禁感概一下&#xff0c;时代的进步是需要人去做出改变的&#xff0c;而不是一味的使用啊&#xff01;所以我们今天继续学一下…

674. 最长连续递增序列 718. 最长重复子数组 1143.最长公共子序列 1035.不相交的线

674. 最长连续递增序列 题目&#xff1a; 给定一个未经排序的整数数组nums&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 dp数组含义&#xff1a; dp[i]&#xff1a;以下标i为结尾的连续递增的子序列长度为dp[i]。 递推公式&#xff1a; 怎么…

3D RPG Course | Core 学习日记四:鼠标控制人物移动

前言 前边我们做好了Navgation智能导航地图烘焙&#xff0c;并且设置好了Player的NavMeshAgent&#xff0c;现在我们可以开始实现鼠标控制人物的移动了。除了控制人物移动以外&#xff0c;我们还需要实现鼠标指针的变换。 实现要点 要实现鼠标控制人物移动&#xff0c;点击…

Python 框架学习 Django篇 (九) 产品发布、服务部署

我们前面编写的所有代码都是在windows上面运行的&#xff0c;因为我们还处于开发阶段 当我们完成具体任务开发后&#xff0c;就需要把我们开发的网站服务发布给真正的用户 通常来说我们会选择一台公有云服务器比如阿里云ecs&#xff0c;现在的web服务通常都是基于liunx操作系统…

虹科示波器 | 汽车免拆检测 | 2017款路虎发现车行驶中发动机抖动且加速无力

一、故障现象 一辆2017款路虎发现车&#xff0c;搭载3.0L发动机&#xff0c;累计行驶里程约为3.8万km。车主反映&#xff0c;车辆在行驶过程中突然出现发动机抖动且加速无力的现象&#xff0c;于是请求拖车救援。 二、故障诊断 拖车到店后首先试车&#xff0c;发动机怠速轻微抖…

Unity地面交互效果——5、角色足迹的制作

大家好&#xff0c;我是阿赵。   之前几篇文章&#xff0c;已经介绍了地面交互的轨迹做法。包括了法线、曲面细分还有顶点偏移。Shader方面的内容已经说完了&#xff0c;不过之前都是用一个球来模拟轨迹&#xff0c;这次来介绍一下&#xff0c;怎样和角色动作结合&#xff0c…

深入浅出理解ResNet网络模型+PyTorch实现

温故而知新&#xff0c;可以为师矣&#xff01; 一、参考资料 论文&#xff1a;Identity Mappings in Deep Residual Networks 论文&#xff1a;Deep Residual Learning for Image Recognition ResNet详解PyTorch实现 PyTorch官方实现ResNet 【pytorch】ResNet18、ResNet20、…

文件夹重命名:解决文件夹名称难题,批量将中文翻译成英文

在日常生活和工作中&#xff0c;我们经常需要处理各种各样的文件和文件夹。然而&#xff0c;有时候我们会遇到文件夹名称混乱或者无法识别的问题&#xff0c;这给我们的文件管理和查找带来了很大的不便。为了解决这些问题&#xff0c;我们可以使用文件夹批量重命名技巧&#xf…

strtok函数详解:字符串【分割】的利器

目录 一&#xff0c;strtok函数简介 二&#xff0c;strtok函数的用法 三&#xff0c;strtok函数的注意事项 一&#xff0c;strtok函数简介 strtok函数可以帮助我们将一个字符串按照指定的分隔符进行分割&#xff0c;从而得到我们想要的子字符串。 &#x1f342;函数头文件&am…

前端工程化(vue脚手架安装)

用命令行安装&#xff0c;先安装NodeJs&#xff0c;配置环境变量 1.npm config set prefix "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Node.js" //引号内路径是NodeJs安装所在路径 2.npm config get prefix 查看其是否成功 3.npm install -g vue/cli 4…

MySQL数据库入门到大牛_05_排序ORDER BY与分页LIMIT

文章目录 1. 排序数据1.1 排序规则1.2 单列排序1.3 多列排序 2. 分页2.1 背景2.2 实现规则2.3 拓展 3. 第五章练习 1. 排序数据 1.1 排序规则 如果没有使用排序操作&#xff0c;默认情况下&#xff0c;查询返回的数据是按照添加数据的顺序显示。例如&#xff1a;在淘宝中可以…