当前位置: 首页 > article >正文

文件io:二、系统io和api

1.前言先讲讲为什么要打开文件或者关闭我们已知linux的各种东西都是文件也就是io。你不打开文件你怎么写程序和编程因此我们需要打开文件编写和操作文件然后再关闭文件。1.1打开文件需要满足的前置条件在每次c语言编写时添加3个头文件这几个头文件的功能是打开一个指定的文件并获得文件描述符没有文件的时候会创建一个新的文件。如果你要关闭文件——你也不想你的文件被打开了就关不了吧需要添加一个#includeunistd.h头文件文件的关闭会在下文提到。1.1.1 open函数介绍我们拿open函数作为一个原型来举例open函数有2种一种有2个参数另一种有3个参数。根据实际情况进行选择就好。pathname是你即将要打开的文件假设你已经在根目录新建了一个nb666.txt文件那么pathname就是nb666.txt。flags就是打开文件后你要进行的操作看上表里的内容根据你需要的操作选择对应的flag。mode如果你选择了有3个参数的open函数那么mode就是你要设定的权限。注意当创建一个新文件时需要用第三个参数指定新文件的权限否则新文件的权限是随机值。1.1.2 注意事项当打开一个已存在的文件时指定两个参数即可。模式flags可以使用位或的方式来同时指定多个模式。模式flags中O_NOCTTY主要用在后台精灵进程阻止这些精灵进程拥有控制终端。精灵进程通常称为守护进程英文Daemon是在后台运行的一种特殊进程没有控制终端独立于用户交互专门执行特定任务或等待处理某些事件。注意怕一些小傻瓜不理解pathnameflagsmode统称为参数。1.1.3 示例代码int main(void) { int fd; //接下来举例两种open函数一种是2个参数的一种是3个参数的 // 以下三种打开方式都要求文件已存在否则失败返回 //这是两个参数的 fd open(a.txt, O_RDWR); // 以可读可写方式打开 fd open(a.txt, O_RDONLY); // 以只读方式打开 fd open(a.txt, O_WRONLY); // 以只写方式打开 // 1. 如果文件不存在则创建该文件并设置其权限为0644 // 2. 如果文件已存在则失败返回 //这是3个参数的 fd open(a.txt, O_RDWR|O_CREAT|O_EXCL, 0644); // 以可读可写方式打开 fd open(a.txt, O_RDONLY|O_CREAT|O_EXCL, 0644); // 以只读方式打开 fd open(a.txt, O_WRONLY|O_CREAT|O_EXCL, 0644); // 以只写方式打开 // 1. 如果文件不存在则创建该文件并设置其权限为0644 // 2. 如果文件已存在则清空该文件的原有内容 //这也是3个参数的 fd open(a.txt, O_RDWR|O_CREAT|O_TRUNC, 0644); // 以可读可写方式打开 fd open(a.txt, O_RDONLY|O_CREAT|O_TRUNC, 0644); // 以只读方式打开 fd open(a.txt, O_WRONLY|O_CREAT|O_TRUNC, 0644); // 以只写方式打开 // 以下三种打开方式都要求文件已存在否则失败返回 fd open(a.txt, O_RDWR|O_APPEND, 0644); // 以可读可写方式追加文件内容 fd open(a.txt, O_WRONLY|O_APPEND, 0644); // 以只写方式追加文件内容 } 文件权限掩码 创建目录或者文件的时候 文件权限 有一个概念是umask 使用命令umask查看 例如0002八进制 000 000 000 010 文件权限 mode (~umask) ~umask 111 111 111 101 mode 0644 000 110 100 100 111 111 111 101 000 110 100 100 0644 mode 0777 000 111 111 111 111 111 111 101 000 111 111 101 0775 umask0002 八进制 设置的权限 0777 0777-0002775 常见umask 0000不屏蔽 0002屏蔽other用户的写权限 002207770755屏蔽除了自己之外所有用户的写入权限 umask 0077 07770700会使得文件和目录仅对所有者可见其他用户无任何权限1.1.4 关闭文件为什么要关闭文件当不再使用一个文件时应当关闭该文件防止系统资源浪费。对同一文件重复执行关闭操作会失败返回不会有其他副作用。文件描述符的资源有限打开文件后一定要记得关闭。示例代码fd的取值预设的最大可打开文件描述符数量0个到1023个可以改这个范围前提是你有需求否则一般不修改所以不讲修改操作。1.2 标准库函数的错误发生的情况前言在所有的库函数中如果调用过程出错了那么该函数除了会返回一个特定的数据来告诉用户调用失效之外还都会去修改一个大家共同的全局错误码errno我们可以通过这个错误码来进一步确认究竟是什么错误。前置条件添加一个头文件#include errno.h使用方法输出错误代码printf(failed,strerror(errno));示例代码注意如果库函数、系统调用出错了全局错误码 errno 会随之改变如果库函数、系统调用没出错全局错误码 errno 不会改变这个可以展开讲讲看2.1一个库函数、系统调用出错后若未及时处理错误码则错误码可能会被随后的其他函数修改也就是说本来出现的错误码被新出现的错误码顶掉了意味着你要即使处理你的错误。1.2.1 为什么成功运行时错误码不改变我们已经知道库函数、系统调用没出错全局错误码 errno 是不会改变的。比如我运行了某个函数出现了以下结果原因这是 C 语言的历史遗留问题errno是一个全局变量在现代 Linux 中其实是线程局部存储函数成功时不去动它是为了避免性能开销这个设计是为了让程序员必须在失败后立即处理errno1.2.3 提取错误码的方法和操作第一种第二种这两种方法的输出结果是一样的输出为

相关文章:

文件io:二、系统io和api

1.前言:先讲讲为什么要打开文件或者关闭:我们已知linux的各种东西都是文件,也就是io。你不打开文件你怎么写程序和编程???因此我们需要打开文件,编写和操作文件,然后再关闭文件。1.1…...

shell脚本语言知识点总结

一、ShellScript 概述1. 基础定义Shell 脚本(ShellScript)是运行在 Linux 终端的脚本语言,本质是Linux 命令的集合,与 C/Java 等编译型语言不同,无需编译即可执行。2. 核心特性弱类型语言:无需提前定义变量…...

SEO_详解SEO关键词研究的完整步骤与工具推荐

SEO关键词研究的完整步骤与工具推荐在当今竞争激烈的互联网环境中,SEO(搜索引擎优化)是提升网站排名和吸引流量的关键。而在SEO的众多策略中,关键词研究占据了核心位置。本文将详细解析SEO关键词研究的完整步骤与推荐的工具&#…...

消息中间件RabbitMQ04:路由模式+死信队列的应用实践模板

一、Demo场景基于 RabbitMQ 实现带死信队列的消息收发场景,生产者发送消息至 Direct 交换机,普通消费者处理消息(50% 失败率),失败 / 超时消息自动进入死信队列,由死信消费者兜底处理,避免消息丢…...

RPC核心原理:组件与调用流程

RPC核心原理:组件与调用流程 RPC(Remote Procedure Call,远程过程调用)的核心价值是屏蔽网络通信的底层复杂性,让开发者调用远程服务的方法时,体验与调用本地方法完全一致。其实现可拆解为5个核心组件和1个…...

二十、kubernetes基础-30-kubernetes-ha-binary-deployment-07-dns-operations

CoreDNS 部署、集群可用性验证与节点管理全攻略 技术深度:⭐⭐⭐⭐⭐ | CSDN 质量评分:97/100 | 适用场景:Kubernetes 服务发现、集群运维、节点管理 作者:云原生架构师 | 更新时间:2026 年 3 月 摘要 本文深入解析 K…...

刚刚!GPT-5.4 mini/nano正式发布,轻量编程模型性能逼近满血版

文章目录前言速度快到飞起,程序员终于可以少等会儿了nano来了:便宜到离谱,速度狂魔专属ChatGPT免费用户也能蹭一波福利价格涨了,但性价比其实更高了?小模型崛起,AI开始学会"分工协作"对我们普通人…...

玄晶引擎XgenCore Works V2.8.1升级解析 技术迭代赋能场景 代理模式全新落地

在AI与RPA技术深度融合、数字化转型加速推进的背景下,玄晶引擎XgenCore Works持续深耕产品迭代,正式推出V2.8.1版本。本次升级聚焦RPA技术优化、场景化落地与市场生态拓展,兼顾技术专业性、功能实用性与商业可行性,严格遵循CSDN平…...

Springboot项目常用工具对比总结

1.json工具对比在 Java 开发中,ObjectMapper.readValue()(Jackson 库)和 JSONObject.parseObject()(FastJSON 库)都是将 JSON 字符串转换为 Java 对象的核心方法,但两者分属不同的 JSON 解析框架;总结 核心…...

Part 1:Python语言核心 - 内建数据类型

Python 数据类型 - 内建数据类型 基本类型 Python 运行时最底层、最稳定、最常被优化的一类对象。 它们的共同点: 都是 内建类型(built-in types)都是 不可变对象(immutable)都有 明确的 C 层实现都深度参与 Python 的…...

RK3588 OpenClaw 定时任务踩坑与守护进程方案

这是 RK3588 部署 OpenClaw 系列的第二篇文章,记录 Android/Termux/PRoot 环境下定时任务失效的踩坑全过程。 系列文章目录: 第一章 RK3588 部署 OpenClaw 完整记录第二章 RK3588 OpenClaw 定时任务踩坑与守护进程方案(本文) 相…...

SEO_长期有效的SEO策略应该如何规划与执行?

SEO的重要性及其长期有效性在数字化时代,搜索引擎优化(SEO)已经成为网站提升可见性和流量的关键策略。SEO不仅能够帮助网站在搜索引擎结果中获得更高的排名,还能为网站带来持续的、有质量的流量。长期有效的SEO策略不仅仅是短期的…...

破解root密码

如果root密码忘记了,那么我们需要以下操作完成破解1首先需要重启虚拟机,然后在出现的页面中通过上下键选择第二个选项,之后点击e建,然后进入以下页面2将页面上代码下的小横线移到quiet这个单词后,然后打出rd.break,打出…...

秋叶大神ComfyUI

链接:https://pan.quark.cn/s/c94e7ef84a73ComfyUI是一个非常便利的AI绘画工具,拥有节点式和工作流式的AI绘画界面,并支持多种节点的使用。秋叶大神发布ComfyUI整合包主要是为了改善国内ComfyUI的入门生态,使新手更轻松入门。尽管…...

为什么世界仍然运行在 SAP 上?——传统企业软件的顽强生命力

这篇来自 Andreessen Horowitz(a16z)的文章探讨了一个重要问题:在云计算和人工智能快速发展的今天,为什么像 SAP 这样的传统企业软件仍然深度主导全球企业运行?其核心结论是:SAP 的优势不在于技术先进&…...

金仓数据库SQL防火墙构建主动防御,让恶意SQL无处遁形

开发留的坑,数据库来填!金仓数据库SQL防火墙,精准拦截99.99%的恶意SQL在数字化转型的浪潮中,数据已成为企业的核心资产。然而,SQL注入攻击如同潜伏在阴影中的“不速之客”,时刻威胁着数据库的安全。即使开发…...

RK3588部署yolov8量化精度对比

1. 准备文件# 配置区 ONNX_MODEL best.onnx # YOLOv8 ONNX 模型路径 DATASET ./COCO/coco_subset_20.txt # 量化校准集 TEST_IMG frame_000000.jpg # 用于精度分析的测试图片 TARGET_PLATFORM rk3588 # 目标芯片 # 2. 调用rknn.accuracy_analysis工具分…...

1389、STM32单片机智能婴儿床声音哭闹 尿液音乐哄睡电机摇床检测无线蓝牙远程(程序+原理图+PCB文件+proteus仿真+参考论文+开题报告+原理图文字讲解+程序流程图+硬件框图+APP源码)

具体详情请点击下面观看: 1389、STM32单片机智能婴儿床声音哭闹 尿液音乐哄睡电机摇床检测无线蓝牙远程(程序原理图PCB文件proteus仿真参考论文开题报告原理图文字讲解程序流程图硬件框图APP源码)-CSDN博客 演示操作视频讲解请点击下面观看:…...

Flutter 迁移鸿蒙 ArkUI 的真实成本

网罗开发(小红书、快手、视频号同名)大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方…...

【大模型的原理架构对比解析】Encoder-Decoder 架构与 Decoder-Only 架构的输入输出详解

文章目录前言一、Encoder-Decoder 架构1. 每次输入和输出2. 详细例子:英译法(1)编码器阶段(2)解码器推理过程二、Decoder-Only 架构详细例子:文本生成三、对比总结前言 在自然语言处理中,Trans…...

YOLO26改进98:全网首发--c3k2模块添加CSSC模块:在长程依赖中捕获列间关系,通过融合列、空间及自依赖信息

论文介绍 在实际红外(IR)成像系统中,有效学习一致的条纹噪声去除模型至关重要。现有的大多数去条纹方法因跨层级语义间隙和全局列特征表征不足,无法精确重建图像。为解决这一问题,提出了一种新型红外图像去条纹方法——非对称采样校正网络(ASCNet),该方法能有效捕获全局…...

Flink知识点(二)|Flink中是怎么处理乱序数据的

在 Flink 里,“乱序”本质是 事件时间(event time) 先后顺序和 到达时间(processing time) 不一致。Flink 处理乱序数据的核心机制主要围绕:事件时间语义 Watermark 窗口触发/延迟 迟到数据处理 状态…...

庭院桌椅一上AI就穿帮,我后来这样挑工具

“这把椅子怎么是悬着的?”客户把截图放大给我看,草地上的阴影往左跑,椅脚却像踩在空气里,藤编靠背还多长出两截。地点就在样板庭院旁的会议桌边,反常的是:那批图第一眼都像宣传片,真拿来做户外…...

30+北漂程序员2个月零基础闯入大模型圈,拿下2W+高薪Offer的逆袭之路!别再困在“想转行”的内耗里!

本文讲述了作者从一位30的北漂程序员,通过2个月零基础学习,成功转型进入大模型领域,并最终获得月薪2W的offer的经历。文章详细分享了作者在大模型领域的转型思考、选对赛道的理由、大模型岗位的实际情况、大模型应用工程师的核心工作内容以及…...

计算复杂性:P、NP、NP-hard、NP-complete 一篇通关

不管是刷算法题、做项目优化,还是准备面试,「计算复杂性」相关的概念(P、NP、NP-hard、NP-complete)绝对是绕不开的坎。很多人第一次接触时都会被这些名词搞懵,甚至越看越乱——“NP问题到底是不是能解决?”…...

深度测评:GPT-5.4 vs Claude 3.5 vs Gemini 3.1 Pro——图片与短视频生成能力全面对比

2026年3月,OpenAI带着GPT-5.4强势回归,直接将AI模型的竞争推向了新高度。这一次,不再是单纯的语言能力比拼,而是智能体(Agent)原生时代的全面较量。当GPT-5.4、Claude 3.5 Sonnet与Gemini 3.1 Pro三强相遇&…...

JAVAee---计算机是如何运行的?

一、JavaEE 与开发环境认知1. 什么是 JavaEE?JavaEE(Java Platform, Enterprise Edition)是 Java 平台的企业版,用于开发大型、分布式、企业级应用程序。与 JavaSE 的区别:JavaSE 是基础版,专注于桌面和基础…...

uc/os-II操作系统时钟节拍器

μC/OS需要用户提供周期性信号源,用于实现时间延时和确认超时。节拍率应在每秒10次到100次之间,或者说10到100Hz 时钟节拍率越高,系统的额外负荷就越重时钟节拍的实际频率取决于用户应用程序的精度 注意: 用户必须在多任务系统启动…...

Linux 进程调度模块

1. 进程与线程的本质在 Linux 内核中,进程和线程没有本质区别,它们统一被称为 任务(Task)。1.1 底层数据结构每个任务在内核中都由一个 struct task_struct 结构体描述,位于内核空间。它是进程/线程的身份证。// 简化版…...

在32位机器上,栈的简单布局

在32位机器上,函数在栈上的布局:void h(int a,int b){ int cab; } int main(){ int a1,b2; h(a,b); }高地址a b b 形参ba 形参aeip …...