Linux编程 文件操作 creat open

文件描述符

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。

启动一个进程之后,内核 PCB 的文件描述符表中就已经分配了三个文件描述符。默认支持打开的最大文件数为 1024。

三个特殊的文件描述符

  • 标准输入文件
  • 标准输出文件
  • 标准错误输出文件
#define STDIN_FILENO 0 // 标准输入文件
#define STDOUT_FILENO 1 // 标准输出文件
#define STDERR_FILENO 2 // 标准错误输出文件

image-20231122154109440

系统调用

由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。

img

Linux系统调用是应用程序与Linux内核进行交互的接口,可以请求内核对其提供服务。这些服务包括文件操作、进程管理、内存管理、网络通信等。系统调用可以实现访问系统资源的安全方式,因为它确保了用户空间和内核空间之间的隔离。在Linux系统中,系统调用以C库函数的形式提供给应用程序,而C库函数会调用相应的汇编指令来触发软中断,将控制权转交给内核进行相应的处理。Linux系统调用的调用号通过eax寄存器传递给内核,不同的系统调用有不同的调用号。

creat函数

函数原型:

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

参数说明:

  • pathname:文件路径名,可以是相对路径或绝对路径。
  • mode:文件创建模式,用于指定文件的权限、所有权等属性。mode_t是一个无符号整型数据类型。

image-20231122155739256

函数返回值:

  • 如果文件创建成功,返回文件的描述符
  • 如果文件创建失败,返回-1

creat函数的作用如下:

  1. 检查文件路径名是否合法;
  2. 创建一个新的文件;
  3. 设置文件的权限、所有权等属性;
  4. 返回文件的描述符,以便后续进行读写操作。

在使用时,需要包含以下头文件:

#include <sys/types.h> // 包含基本系统数据类型
#include <sys/stat.h> // 包含文件数据结构信息
#include <fcntl.h> // 定义了很多宏和open等函数原型

例如,创建一个其他用户可以读、写的文件"lab.kk"。

#include <sys/types.h> // 包含基本系统数据类型
#include <sys/stat.h> // 包含文件数据结构信息
#include <fcntl.h> // 定义了很多宏和open等函数原型int main()
{creat("lab.kk", S_IROTH | S_IWOTH);return 0;
}

也可以用八进制表示:

#include <sys/types.h> // 包含基本系统数据类型
#include <sys/stat.h> // 包含文件数据结构信息
#include <fcntl.h> // 定义了很多宏和open等函数原型int main()
{creat("lab.kk", 0006 );return 0;
}

open函数

open函数用于打开一个文件,并返回一个文件描述符,以便后续对文件进行读写操作。它有两种形式的原型:

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

参数说明:

  • pathname:文件路径名,可以是相对路径或绝对路径。
  • flags:打开文件时的标志,用于指定打开文件的方式(如只读、只写、追加等)。

image-20231122160924597

  • mode:如果需要创建新文件,需要指定文件的创建模式(包括文件权限、所有权等属性),此参数仅在第二种形式中使用。

函数返回值:

  • 成功打开文件,返回文件描述符;
  • 打开文件失败,返回-1。

open函数的作用是用于打开文件或者创建文件。

例如,

int fd1 = open("lab.kk", O_RDONLY); // 以只读方式打开文件lab.kk
int fd2 = open("lab.kk", O_WRONLY | O_CREAT, 0644); // 以只写方式打开文件,如果文件不存在则创建,设置权限为0644 

一、Linux文件编程—open 和创建文件creat函数的使用介绍、文件描述符的概述、linux文件编程的一般步骤、linux文件管理的描述
h

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

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

相关文章

SquareCTF-2023 Web Writeups

官方wp&#xff1a;CTFtime.org / Square CTF 2023 tasks and writeups sandbox Description&#xff1a; I “made” “a” “python” “sandbox” “”“” nc 184.72.87.9 8008 先nc连上看看&#xff0c;只允许一个单词&#xff0c;空格之后的直接无效了。 flag就在当…

inux应用开发基础知识——串口应用编程(十一)

前言&#xff1a; 在Linux系统中&#xff0c;串口设备以文件的形式存在&#xff0c;通常位于/dev目录下&#xff0c;如ttyS0、ttyUSB0等。这些设备文件可以用于读取和写入数据。要使用串口设备&#xff0c;需要打开相应的设备文件。在打开串口时&#xff0c;可以使用O_RDWR选项…

哈夫曼树你需要了解一下

哈夫曼树介绍哈夫曼数特点哈夫曼应用场景哈夫曼构建过程哈夫曼树示例拓展 哈夫曼树介绍 哈夫曼树&#xff08;Huffman Tree&#xff09;是一种特殊的二叉树&#xff0c;也被称为最优二叉树。在计算机科学中&#xff0c;它是由权值作为叶子节点构造出来的一种二叉树。哈夫曼树的…

05 取样器(BeanShell和JSR223 Sampler)

一、取样器作用 1、取样器可以理解为Jmeter的桥梁&#xff0c;或者是Jmeter的加工厂&#xff1b; 2、Jmeter使用过程中&#xff0c;经常有些数据不能直接使用&#xff0c;需要加工后才能使用&#xff1b;这样就用到了取样器&#xff1b;但是这里存在问题&#xff0c;Jmeter中的…

Differences between package.json and pnpm-lock.yaml

1.pnpm-lock.yaml 是pnpm包管理工具生成的确保依赖包的版本在所有的环境里面都相同对依赖包的任何操作都会更新在该文件中&#xff0c;因此&#xff0c;需要确保提交到代码仓库中。包含了解析的依赖项和版本号。如下图&#xff1a; 2.package.json 列出应用所需的依赖和元数…

【黑马甄选离线数仓day01_项目介绍与环境准备】

1. 行业背景 1.1 电商发展历史 电商1.0: 初创阶段20世纪90年代&#xff0c;电商行业刚刚兴起&#xff0c;主要以B2C模式为主&#xff0c;如亚马逊、eBay等 ​ 电商2.0: 发展阶段21世纪初&#xff0c;电商行业进入了快速发展阶段&#xff0c;出现了淘宝、京东等大型电商平台&a…

(swjtu西南交大)数据库实验(数据库需求分析):音乐软件数据管理系统

实验内容&#xff1a; 数据库需求分析&#xff1a;各用户组需求描述&#xff0c;绘出数据流图&#xff08;详细案例参见教材p333~p337&#xff0c;陶宏才&#xff0c;数据库原理及设计&#xff0c;第三版&#xff09;&#xff1b; 一、选题背景 近年来&#xff0c;“听歌”逐…

Ajax入门-Express框架介绍和基本使用

电脑实在忒垃圾了&#xff0c;出现问题耗费了至少一刻钟time&#xff0c;然后才搞出来正常的效果&#xff1b; 效果镇楼 另外重新安装了VScode软件&#xff0c;原来的老是报错&#xff0c;bug。。&#xff1b; 2个必要的安装命令&#xff1b; 然后建立必要的文件夹和文件&…

新能源车将突破2000万辆,汉威科技为电池安全保驾护航

近年来&#xff0c;我国新能源汽车销量持续突破新高。据中汽协数据&#xff0c;1~10月&#xff0c;国内新能源汽车销量达728万辆&#xff0c;同比增长37.8%&#xff0c;市场占有率达到30.4%。随着第四季度车市传统旺季的到来&#xff0c;新能源消费需求将进一步释放&#xff0c…

Python小灰灰

系列文章 序号文章目录直达链接表白系列1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595.blog.csdn.net/article/details/1295031234漂浮爱心htt…

【软件工程师从0到1】- 封装 (知识汇总)

前言 介绍&#xff1a;大家好啊&#xff0c;我是hitzaki辰。 社区&#xff1a;&#xff08;完全免费、欢迎加入&#xff09;日常打卡、学习交流、资源共享的知识星球。 自媒体&#xff1a;我会在b站/抖音更新视频讲解 或 一些纯技术外的分享&#xff0c;账号同名&#xff1a;hi…

Jenkins扩展篇-流水线脚本语法

JenkinsFile可以通过两种语法来声明流水线结构&#xff0c;一种是声明式语法&#xff0c;另一种是脚本式语法。 脚本式语法以Groovy语言为基础&#xff0c;语法结构同Groovy相同。 由于Groovy学习不适合所有初学者&#xff0c;所以Jenkins团队为编写Jenkins流水线提供一种更简…

DataFunSummit:2023年OLAP引擎架构峰会-核心PPT资料下载

一、峰会简介 OLAP技术是当前大数据领域的热门方向&#xff0c;该领域在各个行业都有广泛的使用场景&#xff0c;对OLAP引擎的功能有丰富多样的需求。同时&#xff0c;在性能、稳定性和成本方面&#xff0c;也有诸多挑战。目前&#xff0c;OLAP技术没有形成统一的事实标准&…

redis性能管理

redis的数据库是存放在内存当中&#xff0c;所以对内存的监控至关重要 redis内存监控和解析 1.如何查看redis内存使用情况 [rootlocalhost utils]# redis-cli -h 20.0.0.170 -p 6379 20.0.0.170:6379> info memory used_memory:853336 //redis中数据占用的内存 use…

触发设备离线

业务场景 业务开发过程中&#xff0c;我们经常会需要判断远程终端是否在线&#xff0c;当终端离线的时候我们需要发送消息告知相应的系统&#xff0c; 环形队列 1.创建一个index从0到30的环形队列&#xff08;本质是个数组&#xff09; 2.环上每一个slot是一个Set&#xf…

MYSQL索引使用注意事项

索引使用注意事项&#xff1a; 1.索引列运算 不要在索引列上进行运算操作&#xff0c;否则索引将失效&#xff1b; 2.字符串不加引号 字符串类型使用时&#xff0c;不加引号&#xff0c;否则索引将失效&#xff1b; 3.模糊查询 如果仅仅是尾部模糊匹配&#xff0c;索引将不会失…

关于软raid的实现及常见问题

RAID概念 磁盘阵列&#xff08;Redundant Arrays of Independent Disks&#xff0c;RAID&#xff09;&#xff0c;有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘&#xff0c;以硬件&#xff08;RAID卡&#xff09;或软件&#xff08;MDADM&…

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

【前端学java】语法练习-工具类的封装(13)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

java.net.UnknownHostException: eureka

java.net.UnknownHostException: eureka 哦。HOST漏了 #linux /etc/hosts #windows C:\Windows\System32\drivers\etc\hosts 127.0.0.1 eureka7000 127.0.0.1 eureka7001 127.0.0.1 eureka7002