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

文件IO(20250217)

1. 文件IO

系统调用Linux内核提供的文件操作接口

1. 打开文件  open
2. 读写文件  read/write
3. 关闭文件  close

1.1  open函数

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

pathname:文件路径名,指向要打开的文件路径名,或者文件名,文件路径为绝对路径,文件名则是再当前路径下的

flags(打开方式)

  • O_RDONLY:只读
  • O_WRONLY:只写
  • O_RDWR:读写
  • O_CREAT:创建,创建时可添加0664赋予被创建文件权限
  • O_TRUNC:清空存在的文件
  • O_APPENDD:文件存在时,(文件末尾)追加写

与标准IO的打开方式对比:

  • ‘r’:O_RDONLY
  • 'r+':O_RDWR
  • 'w':O_RDONLY | O_CREAT | O_TRUNC
  • 'w+':O_RDWR | O_CREAT | O_TRUNC
  • 'a':O_WRONLY | O_CREAT | O_APPEND
  • 'a+':RDWR | O_CREAT | O_APPEND

返回值:
            成功返回文件描述符 (最近最小未使用)
            失败返回-1

1.2 文件描述符

小且非负整型数据,代表了一个已打开的文件

  1. 操作系统会为已打开文件分配文件描述符
  2. 默认文件描述符范围:0-1023;
  3. 文件描述符分配原则:最小未被使用原则

系统已打开的三个文件描述符:0, 1, 2

  • 0:标准输入设备,对于标准io的stdin
  • 1:标准输出设备,对应标准io的stdout;
  • 2:标准出错设备,对应标准io的stderr 

已打开的文件在使用完毕后,应及时关闭文件,否则会导致文件描述符泄露。当文件描述符不够用时,可通过修改文件配置提升文件描述符上限。

r/w/x分别对应可读、可写和可执行

1.3 write函数

ssize_t write(int fd,  const  void *buf, size_t count);
        功能:
            通过文件描述符向文件中写一串数据
        参数:
            fd:文件描述符
            buf:要写入文件的字符串的首地址
            count:要写入字符的个数
        返回值: 
            成功返回实际写入的个数
            失败返回-1

1.4 read函数

        ssize_t read(int fd, void *buf, size_t count);
        功能:
            通过文件描述符读取文件中的数据
        参数:
            fd:文件描述符
            buf:存放数据空间的首地址
            count:要读到数据的个数
        返回值:
            成功返回读到数据的个数
            失败返回-1
            读到文件结尾返回0

1.5 文件偏移函数lseek

off_t lseek(int fd, off_t offset, int whence);
        功能:
            重定位一个文件描述符的偏移量(文件定位器)
        参数:
            fd:文件描述符
            offset:偏移量
                        正:向后偏移
                        负:向前偏移
                        零:不偏移
            whence:
                SEEK_SET
                SEEK_CUR
                SEEK_END
        返回值:
            成功返回当前偏移量的值(off_t   long int)
            失败返回-1 

2. 时间相关函数

头文件time.h

2.1 time 

t        ime_t time(time_t *t);
          功能:
            获得1970年1月1日到现在的秒数 
          参数:
            t:存放秒数空间的首地址
          返回值:
            成功返回1970年1月1日到现在的秒数 (time_t   long)
            失败返回-1

2.2 ctime

        char *ctime(const time_t *timep);
          功能:
            将秒数转换为字符串时间
          参数:
            timep:1970年1月1日到现在的秒数
          返回值:
            成功返回时间字符串首地址
            失败返回NULL

2.3 localtime

        struct tm *localtime(const time_t *timep);
           功能:
            将秒数转换为时间结构体
           参数:
            timep:存放秒数空间首地址
           返回值:
            成功返回包含时间结构体空间首地址
            失败返回NULL

struct tm {int tm_sec;         /* seconds */int tm_min;         /* minutes */int tm_hour;        /* hours */int tm_mday;        /* day of the month */int tm_mon;         /* month */int tm_year;        /* year */int tm_wday;        /* day of the week */int tm_yday;        /* day in the year */int tm_isdst;       /* daylight saving time */};

3. printf函数

*int printf(const char *format, ...);

        将格式化的字符串打印到终端

int fprintf(FILE *stream, const char *format, ...);

        将格式化后的字符串写入到文件流指针所对用的文件

int dprintf(int fd, const char *format, ...);

        将格式化后的字符串写入到文件描述符所对用的文件里

*int sprintf(char *str, const char *format, ...);

        将格式化后的字符串写入到str所指向的内存空间 

相关文章:

文件IO(20250217)

1. 文件IO 系统调用Linux内核提供的文件操作接口 1. 打开文件 open 2. 读写文件 read/write 3. 关闭文件 close 1.1 open函数 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int open(const char *pathname, int flags); int ope…...

Django5 实用指南(四)URL路由与视图函数

4.1 Django5的URL路由系统 Django 的 URL 路由系统是其核心组件之一&#xff0c;它负责将用户的 HTTP 请求&#xff08;即 URL&#xff09;映射到相应的视图函数上。每当用户在浏览器中访问某个 URL 时&#xff0c;Django 会根据项目的 URL 配置文件&#xff08;urls.py&#…...

Android 14输入系统架构分析:图解源码从驱动层到应用层的完整传递链路

一、资料快车 1、深入了解Android输入系统&#xff1a;https://blog.csdn.net/innost/article/details/47660387 2、书籍 - Android系统源代码情景分析 二、Perface 1、参考&#xff1a; 2、系统程序分析方法 1&#xff09;加入log&#xff0c;并跟着log一步步分析 -logc…...

Java中Map循环安全的删除数据的4中方法

文章目录 前言一、使用Iterator删除二、使用 removeIf&#xff08;Java 8&#xff09;三、遍历时记录需要删除的键&#xff08;不推荐&#xff09;四、使用 Stream&#xff08;Java 8&#xff09;总结 前言 在 Java 中&#xff0c;遍历 HashMap 并删除数据时&#xff0c;直接使…...

蓝桥杯(B组)-每日一题(1093字符逆序)

c中函数&#xff1a; reverse(首位置&#xff0c;尾位置&#xff09; reverse(s.begin(),s.end()) 头文件&#xff1a;<algorithm> #include<iostream> #include<algorithm>//运用reverse函数的头文件 using namespace std; int main() {string s;//定义一…...

【数据分析】3 数据分析成长之路

职业发展路径&#xff1a; 向上发展&#xff08;技术方向&#xff09;&#xff1a;可以详细说明成为数据科学家或专家所需的具体技能和步骤&#xff0c;包括学习的算法、工具等。向下发展&#xff08;业务方向&#xff09;&#xff1a;可以探讨结合业务知识的具体领域&#xff…...

循环神经网络RNN原理与优化

目录 前言 RNN背景 RNN原理 上半部分&#xff1a;RNN结构及按时间线展开图 下半部分&#xff1a;RNN在不同时刻的网络连接和计算过程 LSTM RNN存在的问题 LSTM的结构与原理 数学表达层面 与RNN对比优势 应用场景拓展 从简易但严谨的代码来看RNN和LSTM RNN LSTM 前言 绕循环神经…...

Python正则表达式处理中日韩字符过滤全解析

Python正则表达式处理中日韩字符过滤全解析 一、核心原理&#xff1a;Unicode字符范围定位 中日韩字符在Unicode中的分布&#xff1a; 中文&#xff1a;\u4e00-\u9fff&#xff08;基本区&#xff09; \u3400-\u4dbf&#xff08;扩展A区&#xff09; \U00020000-\U0002a6df…...

Zabbix 7.2实操指南:基于OpenEuler系统安装Zabbix 7.2

原文出处&#xff1a;乐维社区 部署环境 openEuler 22.03 LTS PHP 8.0 Apache Mysql 8.0 MySQL数据库 6.0 以上版本需要安装mysql8.0以上版本的数据库&#xff08;以mysql为例子&#xff09;。 欧拉系统自带 mysql8.0 的源&#xff0c;无需要安装额外的源。 安装mysql …...

扩展阅读-Elasticsearch 通过索引阻塞实现数据保护深入解析

目录 前言 1、索引阻塞的种类 2、什么时候使用阻塞&#xff1f; 场景1&#xff1a;进行系统维护场景。 场景2&#xff1a;保护数据不被随意更改场景。 场景3&#xff1a;优化资源使用的场景。 场景4&#xff1a;遵守安全规则场景。 3、添加索引阻塞API 4、解除设置 AP…...

SpringMVC重定向接口,参数暴露在url中解决方案!RedirectAttributes

OK&#xff0c;首先描述下业务场景&#xff0c;终端数量限制登录 1.首先访问项目login的get接口 2.输入账号密码点击登录后&#xff0c;会请求login的POST接口 3.后台对终端数量逻辑处理不允许登录跳回到登录页面 4.因代码原因需在后台进行多次重定向接口&#xff0c;最后跳…...

硬件学习笔记--46 电能表影响量试验梳理

目录 1.电流和电压电路中的谐波影响试验 1&#xff09;电流和电压电路中谐波——第5次谐波试验 2&#xff09;电流和电压电路中谐波——方顶波波形试验 3&#xff09;​​​​​​​电流和电压电路中谐波——尖顶波波形试验 4&#xff09;​​​​​​​电流和电压电路中谐…...

大数据技术之HBase操作归纳

HBase基本命令总结表(实际操作方式) 进入Hbase&#xff1a;hbase shell 方式一&#xff1a;命令行窗口来操作HBase 1.通用性命令 version 版本信息 status 查看集群当前状态 whoami 查看登入者身份 help 帮助2.HBase DDL操作(对象级操作) 2.1、namespace命名空间(相当…...

后端Java Stream数据流的使用=>代替for循环

API讲解 对比 示例代码对比 for循环遍历 package cn.ryanfan.platformback.service.impl;import cn.ryanfan.platformback.entity.Algorithm; import cn.ryanfan.platformback.entity.AlgorithmCategory; import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO; im…...

遗传算法与深度学习实战系列,自动调优深度神经网络和机器学习的超参数

遗传算法与深度学习实战系列文章 目录 进化深度学习生命模拟及其应用生命模拟与进化论遗传算法中常用遗传算子遗传算法框架DEAPDEAP框架初体验使用遗传算法解决N皇后问题使用遗传算法解决旅行商问题使用遗传算法重建图像遗传编程详解与实现粒子群优化详解与实现协同进化详解与…...

体验用ai做了个python小游戏

体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见&#xff0c;欢迎页面和结束页面背景是视频&#xff0c;游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…...

谷粒商城—分布式高级②.md

认证服务 1. 环境搭建 创建gulimall-auth-server模块,导依赖,引入login.html和reg.html,并把静态资源放到nginx的static目录下 2. 注册功能 (1) 验证码倒计时 //点击发送验证码按钮触发下面函数 $("#sendCode").click(function () {//如果有disabled,说明最近…...

阿里云ECS命名规则解析与规格选型实战指南

阿里云ECS实例的命名规则通常采用 “ecs.{实例族}.{规格大小}” 的结构,各部分含义如下: 命名字段说明ecs代表“弹性计算服务”(Elastic Compute Service)。{实例族}标识实例的用途和代次(如 g7、c7、r7),由字母+数字组成。{规格大小}表示实例的资源配置(如 large、2xl…...

Spring MVC 的核心以及执行流程

Spring MVC的核心 Spring MVC是Spring框架中的一个重要模块&#xff0c;它采用了经典的MVC&#xff08;Model-View-Controller&#xff09;设计模式。 MVC是一种软件架构的思想&#xff0c;它将软件按照模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;…...

ai json处理提示词

在解析JSON数据时&#xff0c;提示词的设计需要明确任务目标、输入格式以及期望的输出格式。以下是一些常用的提示词示例&#xff0c;适用于不同的JSON解析场景&#xff1a; 1. 提取特定字段 用于从JSON中提取特定字段的值。 示例&#xff1a; 从以下JSON数据中提…...

C++26反射元编程成本封顶术:4种编译期剪枝模式+1个编译器补丁级优化,已获ISO WG21非正式采纳

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C26反射元编程成本封顶术全景导览 C26 正式引入静态反射&#xff08;std::reflexpr&#xff09;与编译期计算增强机制&#xff0c;使元编程从“类型推导黑箱”迈向“可审计、可截断、可封顶”的新范式。…...

CUDA 13.3新增的__hmma_bf16_sm80指令集实战(首曝):BERT-large QKV融合算子重构,较cuBLAS快3.8×

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;CUDA 13.3新增__hmma_bf16_sm80指令集的架构意义与AI算子演进背景 NVIDIA 在 CUDA 13.3 中正式引入面向 Hopper 架构&#xff08;SM80&#xff09;的 __hmma_bf16 系列内建函数&#xff0c;标志着 BF16…...

macOS下XGBoost安装指南与性能优化

1. 项目概述在数据科学和机器学习领域&#xff0c;XGBoost因其卓越的性能和效率而广受欢迎。作为一个基于梯度提升框架的算法库&#xff0c;它在各类数据竞赛中屡获佳绩。对于使用macOS系统的Python开发者来说&#xff0c;正确安装XGBoost是开展相关工作的第一步。我曾在多个实…...

从需求到上线:手把手教你用XMind和Notion打造动态可视化测试大纲

从需求到上线&#xff1a;用XMind和Notion构建动态可视化测试大纲的完整指南 在快速迭代的SaaS产品开发中&#xff0c;传统Word/Excel测试大纲往往沦为"写完即弃"的文档。本文将展示如何通过XMind的视觉化思维和Notion的数据库联动能力&#xff0c;打造一个真正服务于…...

GetQzonehistory:一键永久备份你的QQ空间青春记忆

GetQzonehistory&#xff1a;一键永久备份你的QQ空间青春记忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否还记得那些年在QQ空间写下的第一条说说&#xff1f;那些记录着成长点…...

并发控制思路

今天写批量执行异步函数(查询后发现类似并发控制)时下意识用了forEachtry {await Promise.all(resource.map(async (r) > {await send()}));} catch (error) {xxx}finally{await refresh();}};本来预想的是在resource遍历执行完send后再刷新数据&#xff0c;结果查看网络请求…...

全栈聚合应用ChattyPlay-Agent:从架构演进到工程化实战

1. 项目概述&#xff1a;一个全栈开发者的“瑞士军刀”是如何炼成的作为一名在前后端领域摸爬滚打了十多年的开发者&#xff0c;我见过也做过不少“聚合型”应用。但像ChattyPlay-Agent这样&#xff0c;能把视频解析、AI对话、金融数据、漫画阅读、论文工具、闲鱼助手等十几个看…...

VSCode 2026权限模型重构全披露,基于OAuth 2.1+OPA策略引擎的动态授权架构,附可运行Policy-as-Code示例

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode 2026 实时协作权限控制 VSCode 2026 引入了基于角色的细粒度实时协作权限模型&#xff0c;支持多人编辑同一文件时对光标、编辑、保存、调试等操作实施动态策略管控。该能力依托内置的 collab-p…...

OpenModScan:工业自动化工程师必备的免费Modbus调试工具终极指南

OpenModScan&#xff1a;工业自动化工程师必备的免费Modbus调试工具终极指南 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan OpenModScan是一款功能强大的免费开源Modb…...

NotebookLM-MCP:基于MCP协议扩展AI笔记工具的外部能力

1. 项目概述&#xff1a;当NotebookLM遇见MCP&#xff0c;AI笔记的“外挂大脑”革命如果你和我一样&#xff0c;深度依赖NotebookLM这类AI笔记工具来整理信息、激发灵感&#xff0c;那你一定也遇到过它的“能力边界”问题。NotebookLM本身很强大&#xff0c;能基于你上传的文档…...