文件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 文件描述符
小且非负整型数据,代表了一个已打开的文件
- 操作系统会为已打开文件分配文件描述符
- 默认文件描述符范围:0-1023;
- 文件描述符分配原则:最小未被使用原则
系统已打开的三个文件描述符: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…...
Mac arm架构使用 Yarn 全局安装 Vue CLI
dgqdgqdeMacBook-Pro spid-admin % vue --version zsh: command not found: vue要使用 Yarn 安装 Vue CLI,你可以执行以下命令: yarn global add vue/cli这个命令会全局安装 Vue CLI,让你可以使用 vue 命令创建、管理 Vue.js 项目。以下是一…...
ES6相关操作(2)
一.Promise Promise是ES6引入的异步编程工具。 语法上Promise是一个构造函数,用于封装异步操作并可以获取操作成功或失败的结果 Promise构造函数:Promise(excutor){} Promise的常用函数:then,catch 实例化Promise对象(创建Promise工具) let data"请求数据"//该数据为…...
成员函数定义后面加const是什么功能:C++中const成员函数的作用
成员函数定义后面加const是什么功能:C中const成员函数的作用 前言C中const成员函数的作用总结 前言 在PX4的代码中的位置控制模块中,有这样一个成员函数 void getAttitudeSetpoint(vehicle_attitude_setpoint_s &attitude_setpoint) const;该函数的…...
DeepSeek智能测试助手:分类+推理+导出一站式工具
前言 测试开发工程师在日常工作中需要处理大量测试文档,并且这些文档需要被高效分类、清洗和管理,同时结合强大的 AI 推理能力(如 DeepSeek 模型)进行智能化处理和分析。为此,我们开发了一款基于 PyQt5 的 GUI 工具&a…...
【嵌入式Linux应用开发基础】进程间通信(3):共享内存
目录 一、共享内存核心概念 1.1. 特点 1.2. 适用场景 二、共享内存原理剖析 三、嵌入式 Linux 中共享内存的使用 3.1. 相关函数介绍 3.2. System V共享内存操作步骤 3.3. 同步机制(示例使用System V信号量) 3.4. POSIX共享内存(现代…...
日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(10): になります :表示从一种状态转变为另一种状态,“变得……”“成为……”
日语学习-日语知识点小记-构建基础-JLPT-N4&N5阶段(10): になります :表示从一种状态转变为另一种状态,“变得……”“成为……” 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)寒くなりました & 元気になりました(2)何(なに)になりたいですか。(…...
计算机毕业设计Python农产品推荐系统 农产品爬虫 农产品可视化 农产品大数据(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
Python HTTP 请求工具类 HttpUtils:简化 HTTP 请求的高效工具
在现代的 Web 开发和 API 集成中,HTTP 请求是最常见的操作之一。无论是获取数据、提交表单,还是与 RESTful API 交互,我们都需要频繁地发送 HTTP 请求。为了简化这些操作,提升代码的可读性和可维护性,我们可以使用一个…...
「正版软件」PDF Reader - 专业 PDF 编辑阅读工具软件
PDF Reader 轻松查看、编辑、批注、转换、数字签名和管理 PDF 文件,以提高工作效率并充分利用 PDF 文档。 像专业人士一样编辑 PDF 编辑 PDF 文本 轻松添加、删除或修改 PDF 文档中的原始文本以更正错误。自定义文本属性,如颜色、字体大小、样式和粗细。…...
【linux】文件与目录命令 - grep
文章目录 1. 基本用法2. 常用参数3. 用法举例4. 注意事项5. 正则表达式5.1 正则表达式元字符5.2 正则表达式常用修饰符5.3 正则表达式运算符优先级5.4 正则表达式匹配规则 grep 命令用于在文本文件或标准输入中查找匹配的字符串模式,是一种功能强大的文本搜索工具&a…...
2025鸿蒙开发面试题汇总——通俗易懂
问题和通俗易懂的答案,覆盖鸿蒙开发的核心知识点和实际场景,方便面试时快速评估候选人能力: 一、基础概念(必问) 鸿蒙和安卓最大的区别是什么?举个实际例子。 答案:鸿蒙是“分布式操作系统”&am…...
专利申请流程详解:从创意到授权的完整指南
引言 专利是保护发明创造的重要法律工具,能够为发明人提供独占权,防止他人未经许可使用、制造或销售其发明。无论是个人发明者还是企业,了解专利申请流程都是至关重要的。本文将详细介绍专利申请的完整流程,帮助你从创意到授权&a…...
编写测试计划的六大要素是什么
编写测试计划时,一般需要包括以下六大要素,确保测试工作的完整性和可执行性: 1. 测试目标(Test Objectives) 明确测试的目的,如: 确保系统符合业务需求和技术要求。发现并修复软件缺陷。验证性…...
日期类(完全讲解版)
1. 类的设计思想 Date 类的设计目的是为了封装和处理日期信息,它提供了对日期的基本操作,如日期加减、日期比较、日期合法性检查等。类中的私有成员 int _year, int _month, int _day 存储了日期的年、月、日。 类的声明和构造 Date 类的声明࿱…...
Python网络爬虫技术详解文档
Python网络爬虫技术详解文档 目录 网络爬虫概述爬虫核心技术解析常用Python爬虫库实战案例演示反爬虫机制与应对策略爬虫法律与道德规范高级爬虫技术资源推荐与学习路径1. 网络爬虫概述 1.1 什么是网络爬虫 网络爬虫(Web Crawler)是一种按特定规则自动抓取互联网信息的程序…...
解决服务器上运行YOLO时字体问题
问题描述:运行YOLO时,需要Arial.ttf,由于网络较差,可以先将字体下载到本地,再上传到服务器。 下载地址:项目首页 - Arial字体资源文件下载:本仓库提供了一系列Arial字体的ttf格式文件下载。Arial字体是一种广泛使用的无衬线字体&…...
洛谷 P10726 [GESP202406 八级] 空间跳跃 C++ 完整题解
一、题目链接 P10726 [GESP202406 八级] 空间跳跃 - 洛谷 二、解题思路 我们要对输入的挡板进行排序,按高度从高到低(从小到大)。 排序之后s和t都要更新。 struct Baffle {int l, r;int h;int id; } b[1005];void Sort() {sort(b 1, b 1 n…...
DeepSeek系列模型发展:从LLM到V3、R1的技术突破与优化各阶段的重要论文汇总(附下载地址)
DeepSeek 系列模型从最初的 LLM 版本发展到最新的 V3 和 R1 版本,在架构设计、训练效率和推理能力方面不断取得进步。以下是各版本按时间倒序的详细信息: 1. DeepSeek-R1 发布时间:2025年1月 论文标题:DeepSeek-R1: Incentivizi…...
【设计模式精讲】创建型模式之工厂方法模式(简单工厂、工厂方法)
文章目录 第四章 创建型模式4.2 工厂方法模式4.2.1 需求: 模拟发放奖品业务4.2.2 原始开发方式4.2.3 简单工厂模式4.2.3.1 简单工厂模式介绍4.2.3.2 简单工厂原理4.2.3.3 简单工厂模式重构代码4.2.3.4 简单工厂模式总结 4.2.4 工厂方法模式4.2.4.1 工厂方法模式介绍4.2.4.2 工厂…...
AI大模型-提示工程学习笔记13-自动推理并使用工具
卷首语:我所知的是我自己非常无知,所以我要不断学习。 写给AI入行比较晚的小白们(比如我自己)看的,大神可以直接路过无视了。 自动推理并使用工具 (ART) 是一种结合了大语言模型(LLM)的推理能…...
【ROS2】【ROS2】RViz2源码分析(八):Display中订阅ROS2消息(使用Qt信号和槽传递ROS2消息)
1、简述 RViz2 涵盖了 Qt 和 ROS2 的技术点,前面介绍 DisplaysPanel 时,主要分析了Qt相关部分,参见博客: 【ROS2】RViz2源码分析(七):DisplaysPanel 中的树状模型/视图 本篇博客,将会一起学习 RViz2 中如何使用 ROS2,以 Display 中订阅 ROS2 消息为例。 2、通过话题…...
牛顿法:用泰勒级数求解平方根的秘籍
目录 一、引言二、牛顿法的理论基础——泰勒级数三、牛顿法的原理与推导3.1 原理概述3.2 推导过程3.3 几何解释 四、牛顿法的应用场景4.1 数值计算4.2 优化问题 五、牛顿法求平方根的具体案例5.1 原理推导5.2 具体步骤5.3 代码实现(Python)5.4 示例计算过…...
Unity 打开摄像头 并显示在UI
需求: 打开相机并显示在UI上 效果: 注意: 电脑可能有多个摄像头,注意名称 代码: using System; using System.Linq; using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; #if UNITY_EDITOR using UnityEditor; #endifname…...
Linux系统中常见的词GNU是什么意思?
GNU 是 “GNU’s Not Unix” 的递归缩写,它是一个自由软件项目,旨在创建一个完全自由的操作系统。这个名字反映了GNU项目的核心理念:它试图创建一个类Unix的系统,但不是Unix本身。 GNU 项目由 理查德斯托曼(Richard S…...
RAGFLOW使用flask转发的open ai接口
flask转发openai标准接口 背景 搭建RAGFLOW 的过程中,遇到一个比较严重的问题,公司部署的大模型代理需要获取token,且token存在有效期5分钟,在RAGFLOW中不能直接用,所以希望通过flask项目转发请求。 方案 比较好的…...
jQuery UI CSS 框架 API
jQuery UI CSS 框架 API 概述 jQuery UI 是一个基于 jQuery 的用户界面和交互库,它提供了一套丰富的交互组件和视觉效果,旨在帮助开发者快速构建具有吸引力和互动性的网页应用。jQuery UI CSS 框架 API 是 jQuery UI 的一部分,它允许开发者通过简单的 CSS 类来控制 UI 组件…...
RK Android11 WiFi模组 AIC8800 驱动移植流程
RK Android WiFi模组 AIC8800 驱动移植流程 作者:Witheart更新时间:20250220 概要:本文介绍了基于 AIC8800D40 芯片的 WiFi6 模组 BL-M8800DS2-40 在 RK3568 平台上的驱动移植流程。主要涉及环境搭建、驱动代码分析、设备树修改、驱动编译配…...
【大模型】DeepSeek-RAG 本地化部署与军事情报应用研究报告
【大模型】DeepSeek-RAG 本地化部署与军事情报应用研究报告 一、研究背景二、DeepSeek 本地部署(一)部署环境(二)部署步骤(三)本地化部署流程优化 三、RAG 知识库构建(一)数据预处理…...
Windows PyCharm的python项目移动存储位置后需要做的变更
项目使用的venv虚拟环境,因此项目移动存储位置后需要重新配置python解释器的位置,否则无法识别,若非虚拟环境中运行,则直接移动后打开即可,无需任何配置。 PyCharm版本为2021.3.3 (Professional Edition),其…...
