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.hqwc.cn/news/206183.html

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

相关文章

常用的工作资料怎么在电脑上记录呢?

在现代工作中&#xff0c;我们经常需要记录各种各样的工作资料&#xff0c;例如会议记录、项目计划、待办事项等等。传统的纸质笔记本虽然方便携带&#xff0c;但难以整理和检索。而在电脑上直接记录常用的工作资料&#xff0c;在记录、整理、查看、使用等方面都是更为高效、便…

Amlogic方案遥控器配置(Android11)

配置路线 键值变化路径&#xff1a; ScanCode --> Keycode Lable --> KeyCode Layout --> KeyLable --> Keycode – > KeyEvent 文件映射路径&#xff1a; *.dtsi --> input-event-codes.h --> *.kl --> InputEventLable.h --> kecodes.h --> P…

【Android】声浪 UI 效果并附上详细代码

声浪效果是基于第三方实现的。 https://github.com/xfans/VoiceWaveView 将三方的 Kotlin 代码转 java 使用&#xff08;按照他的readme 进行依赖&#xff0c;好像少了点东西&#xff0c;至少本项目跑不起来&#xff09; 声浪效果在android 8 以上都是比较好的&#xff0c;不会…

Redis整数集合

前言 整数集合(intset)是集合键的底层实现之一&#xff0c;当一个集合只包含整数值元素&#xff0c;并且这个集合的元素数量不多时&#xff0c;Redis就会使用整数集合作为集合键的底层实现。 一. 整数集合的实现 1.1 结构 整数集合(intset)是Redis用于保存整数值的集合抽象数据…

智能井盖传感器建设信息化时代智慧城市

近年来随着信息技术的快速发展和城市化进程的加速推进&#xff0c;智慧城市的概念逐渐成为现实。作为智慧城市生命线建设中的重要组成部分&#xff0c;智能井盖传感器的应用正在为城市的可持续发展和居民的生活质量提供新的解决方案。 智能井盖传感器能够实时监测井盖状态&…

规划类3d全景线上云展馆帮助企业轻松拓展海外市场

科技3D线上云展馆作为一种基于VR虚拟现实和互联网技术的新一代展览平台。可以在线上虚拟空间中模拟真实的展馆&#xff0c;让观众无需亲自到场&#xff0c;即可获得沉浸式的参观体验。通过这个展馆&#xff0c;您可以充分、全面、立体展示您的产品、服务以及各种创意作品&#…

解决wangeditor点击全屏被遮挡的问题

问题页面 尝试过的方法 1 添加样式 #editor-wrapper { z-index: 1000; /* 设置一个较大的值 */ } 无效 2 包裹在el-from标签里 无效 解决 把编辑器放在div中 注意在div中加上zindex&#xff0c;并且设置的层级高一点 整体代码 <div style"z-index: 1001; position…

详解Java的static关键字

文章目录 &#x1f384;静态方法&#x1f33a;静态方法和非静态方法对比&#x1f6f8;静态方法实例&#x1f6f8;非静态方法实例 &#x1f339;static关键字⭐static变量⭐static代码块 &#x1f384;静态方法 不依赖于对象实例&#xff1a;静态方法不需要依赖于任何对象实例&…

美团四年、字节三年,我的软件测试之路

前言 时间回到8年前&#xff0c;我人生中的第一份实习工作&#xff0c;是在某互联网公司做一个自动化测试工程师。当时的我可谓意气风发&#xff0c;想要大干一场&#xff0c;结果第一次做测试就出现了事故。由于对某些地方的不了解&#xff0c;把某一个地方侧漏了&#xff0c…

python练习题(markdown中的60道题)

1.Demo01 摄氏温度转化为华氏温度 celsius float(input(输入摄氏温度&#xff1a;)) fahrenheit (9/5)*celsius 32 print(%0.1f 摄氏温度转为华氏温度为 %0.1f % (celsius, fahrenheit))结果&#xff1a; 2.Demo02 计算圆柱体的体积 h, r map(float, input().split())# …

2014年8月20日 Go生态洞察:Go在OSCON的精彩亮相

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

文心大模型商业化领跑,百度在自我颠覆中重构生长力

随着科技巨头竞逐AI大模型&#xff0c;人工智能技术成为今年最受瞩目的新技术。但是&#xff0c;AI大模型的创新之路&#xff0c;还缺少一个足够有力的商业化答案。 作为全球最先发布大模型的互联网大厂&#xff0c;百度能否加速大模型的应用落地&#xff0c;以及文心大模型能…