Linux编程 文件操作 creat open

news2024/12/26 11:57:40

文件描述符

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

启动一个进程之后,内核 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.coloradmin.cn/o/1241566.html

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

相关文章

3.OpenFeign的使用

OpenFeign 文章目录 OpenFeign一. 什么是OpenFeign二. OpenFeign基础使用1.添加依赖2.配置Nacos配置信息3.在项目中开启OpenFeign4.编写OpenFeign调用代码5.调用OpenFeign接口 三. OpenFeign内置的超时重试机制1.配置超时重试2.覆盖Retryer对象 四.自定义超时重试机制1.自定义超…

vue3-生命周期

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-生命周期 目录 vue3生命周期 vue3生命周期钩子 1.1 onMounted() 1.2 onUpdated() 1.3 onU…

Airtest结合Poco对控件实施精准截图,学起来!

1.前言 最近在Q群内发现有个小伙伴提出了一个很有趣的脚本需求&#xff0c;想要实现“通过选择器获取到了控件&#xff0c;然后截图这个控件范围”&#xff0c;根据我们的Airtest的局部截图接口以及poco控件的属性查询接口是可以很快实现的~ 2.接口查找 首先我们需要知道我们…

什么软件可以做报表?

报表在现代企业和组织中扮演着重要角色。它们是数据汇总、分析和展示的重要工具&#xff0c;为管理层和决策者提供洞察和指导。但是&#xff0c;报表的制作并非易事。使用Excel或手写代码开发报表可能会带来一系列痛点&#xff0c;而现代化的解决方案——比如VeryReport报表软件…

分布式锁之传统锁回顾(一)

1. 传统锁回顾 1.1. 从减库存聊起 多线程并发安全问题最典型的代表就是超卖现象 库存在并发量较大情况下很容易发生超卖现象&#xff0c;一旦发生超卖现象&#xff0c;就会出现多成交了订单而发不了货的情况。 场景&#xff1a; 商品S库存余量为5时&#xff0c;用户A和B同…

智能导视电子指路牌是什么?

SVIP-3800系列智能电子指路牌也称智慧指路灯杆&#xff0c;智能指路牌&#xff0c;导航立柱&#xff0c;多功能指示牌&#xff0c;多功能路标&#xff0c;智能指路机器人&#xff0c;智能导视指路牌&#xff0c;问路导航机器人&#xff0c;智能路牌&#xff0c;叁仟智慧路牌、智…

电商数据采集|电商API接口接入|从京东平台获取商品SKU 主图 价格 详情数据

在进行API开发过程中&#xff0c;数据异常常常令人头痛。我们的API开车软件经过精心设计和测试&#xff0c;能够准确识别并及时处理各类数据异常。拥有稳定的运行环境&#xff0c;保障了您的开发进程不受干扰&#xff0c;让您的工作更加顺畅高效。 京东获得JD商品详情 API 返…

AI助力钢铁产业数字化,python基于YOLOv5开发构建钢铁产业产品智能自动化检测识别系统

AI为工业产业智能化数字化赋能早已不是什么新鲜事&#xff0c;越来越多的行业和领域开始更大范围去拥抱AI&#xff0c;享受科技带来的变革力量&#xff0c;在我们之前的文章中也有很多相关领域项目的实践经历&#xff0c;本文的核心目标就是想要基于钢铁领域产品数据来开发构建…

VirtualBox下win主机如何访问linux虚拟机文件夹

目录 ​编辑 方法1&#xff1a;通过VirtualBox自带的共享文件夹&#xff08;Win->linux&#xff09; 方法2&#xff1a;通过Samba方法本地网络访问(Linux->win) 我使用的VirtualBox版本为7.0.4,主机是Window系统&#xff0c;虚拟机是Linux系统 方法1&#xff1a;通过Vir…

易点易动设备管理系统提升设备能耗管理和设备状态监控效率

如今&#xff0c;能源效率和设备状态监控对于企业来说变得越发重要。传统的设备管理方式往往存在能耗浪费和难以实时监控设备状态的问题。为了解决这些问题&#xff0c;易点易动设备管理系统应运而生。本文将介绍易点易动设备管理系统的功能和优势&#xff0c;以及如何通过它提…

深度学习之六(自编码器--Autoencoder)

概念 自编码器(Autoencoder)是一种神经网络架构,用于无监督学习和数据的降维表示。它由两部分组成:编码器(Encoder)和解码器(Decoder)。 结构: 编码器(Encoder): 接收输入数据并将其压缩为潜在表示(latent representation),通常比输入数据的维度要低。编码器的…

Sam Altman回归OpenAI,新董事会成员曝光!

11月22日下午&#xff0c;OpenAI在社交平台宣布&#xff0c;在原则上已达成协议&#xff0c;让 Sam Altman重返 OpenAI担任首席执行官&#xff0c;并重组董事会。稍后会公布更详细的内容。 初始董事会成员包括前Salesforce联合首席执行官Bret Taylor&#xff08;担任主席&…

【AI读论文】AutoML的8年回顾:分类、综述与趋势

论文标题&#xff1a;Eight years of AutoML: categorisation, review and trends 论文链接&#xff1a;https://link.springer.com/article/10.1007/s10115-023-01935-1 本文主要围绕自动机器学习&#xff08;AutoML&#xff09;展开了系统性的文献综述&#xff0c;总结了该领…

德迅云安全-德迅卫士:保障您的主机安全

主机安全是指保证主机在数据存储和处理的保密性、完整性、可用性&#xff0c;包括硬件、固件、系统软件的自身安全&#xff0c;以及一系列附加的安全技术和安全管理措施。 为什么要主机安全&#xff1f; 服务器一旦被黑客入侵&#xff0c;个人和企业面临以下安全风险&#xff…

基于springboot实现家政服务管理平台项目【项目源码+论文说明】

摘要 随着家政服务行业的不断发展&#xff0c;家政服务在现实生活中的使用和普及&#xff0c;家政服务行业成为近年内出现的一个新行业&#xff0c;并且能够成为大众广为认可和接受的行为和选择。设计家政服务管理平台的目的就是借助计算机让复杂的销售操作变简单&#xff0c;…

unity Toggle,初始时默认不选中,若选中则不可取消选中。不写码实现其效果

实现效果&#xff1a; 初始默认时&#xff1a; 选中时&#xff1a; 零代码实现&#xff1a; 步骤1 步骤2 步骤3

Pycharm设置文件头部声明注释

设置头部声明 英文版&#xff1a;点击file-->settings-->editor-->file and code templates-->选择Python Script 中文版如下&#xff1a; 复制如下内容 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2023/11/23 10:05 # Author : wyq # File …

Python + Docker 还是 Rust + WebAssembly?

在不断发展的技术世界中&#xff0c;由大语言模型驱动的应用程序&#xff0c;通常被称为“LLM 应用”&#xff0c;已成为各种行业技术创新背后的驱动力。随着这些应用程序的普及&#xff0c;用户需求的大量涌入对底层基础设施的性能、安全性和可靠性提出了新的挑战。 Python 和…

微信开放平台Android平台应用签名怎么填写

winR 输入cmd 进到本地签名文件的目录下 输入 keytool -list -v -keystore <keystore文件路径> -alias <别名>请将 <keystore文件路径> 替换为您的密钥库文件&#xff08;通常是 .jks 或 .keystore 文件&#xff09;的路径&#xff0c;而 <别名> 则是…

如何判断交流回馈老化测试负载是否合格?

交流回馈老化测试负载是用于模拟实际工作环境中设备运行状态的测试工具&#xff0c;主要用于检测设备的耐久性和稳定性。 负载性能&#xff1a;需要检查负载的性能是否符合设计要求&#xff0c;这包括负载的功率、电流、电压等参数是否在规定的范围内&#xff0c;以及负载的工作…