Linux:文件IO介绍

news2024/10/8 19:40:20

Linux文件IO

  • 1、文件打开与关闭
    • (1)文件打开open
    • (2)文件关闭close
  • 2、文件数据读写
    • (1)文件读取read
    • (2)文件写入write
  • 3、文件指针
    • (1) lseek函数原型
    • (2) lseek函数的应用
      • A.移动文件指针
      • B.文件拓展
    • (3)文件的拓展和截断

每个操作系统中都有自己的系统函数,系统函数充当内核函数和用户之间的桥梁,因为系统函数的提供,使得用于可以间接地调用操作系统的内核函数。

1、文件打开与关闭

(1)文件打开open

打开磁盘文件,打开方式有:只读、只写、读写、追加、创建等)

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
// 打开一个已经存在的磁盘文件
int open(const char *pathname, int iOpenWay); 
// 打开磁盘文件, 如果文件不存在, 就会自动创建
int open(const char *pathname, int iOpenWay, mode_t mode);
  • pathname:磁盘文件的路径

  • iOpenWay:打开文件的方式,只读(O_RDONLY、O_WRONLY、O_RDWR、O_APPEND、O_CREATE、O_EXCL)

  • mode:指定新文件的权限,在创建新文件的时候才需要指定

  • return:正数表示返回的文件描述符,-1表示打开失败

(2)文件关闭close

关闭已经打开的磁盘文件

#include <unistd.h>
int close(int fd);
  • fd:文件描述符,一般是open返回的文件描述符
  • return:0表示文件关闭成功,-1表示关闭失败

2、文件数据读写

(1)文件读取read

从文件中读取数据

#include <unistd.h>
int read(int fd, void *buf, size_t bufSize);
  • fd:open函数返回的文件描述符
  • buf:将读取的数据保存到buf缓存中
  • bufSize:缓冲区的最大字节数
  • return:正数表示从文件中读取的字节数(读取成功);0表示文件读取完毕(读取成功);-1表示文件读取失败

(2)文件写入write

写入数据到磁盘文件中

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t bufSize);
  • fd:open函数返回的文件描述符
  • buf:将buf中的数据写入到磁盘中
  • bufSize:写入的字节数,一般为缓冲区的大小
  • return:大于0表示写入的字节数量,-1表示写入失败

3、文件指针

文件指针是一个用于标识文件中特定位置的对象或变量

(1) lseek函数原型

#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
  • fd:open返回的文件描述符
  • offset:偏移量,需要和第三个参数配合使用
  • whence:指定函数偏移的起点;SEEK_SET表示从头开始偏移offset;SEEK_CUR表示从当前位置向后偏移offset;SEEK_END表示从尾部向后偏移offset
  • return:正数表示从头开始的总偏移量;-1表示该函数调用失败

(2) lseek函数的应用

A.移动文件指针

lseek(fd,0,SEEK_SET); //移动文件指针到文件开头
lseek(fd,0,SEEK_CUR); //得到当前文件指针的位置
lseek(fd,0,SEEK_END); //得到文件总大小

B.文件拓展

提前申请并占用一块磁盘空间;在下载文件的时候,为了防止在下载过程中磁盘空间不足,一般会提前占用需要大小的磁盘空间

lseek(fd, 1000, SEEK_END);
write(fd, " ", 1);//即可提前额外开辟1001个字节

(3)文件的拓展和截断

// 拓展文件或截断文件
#include <unistd.h>
#include <sys/types.h>
int truncate(const char *path, off_t length);
int ftruncate(int fd, off_t length);
  • path:要拓展或截断的文件名 fd:文件描述符
  • length:文件的最终大小,当文件大小size>length时候,文件将被截断;当文件大小size<length的时候,文件将被拓展
  • return:0表示成功,-1表示失败

truncate() 和 ftruncate() 两个函数的区别在于一个使用文件名一个使用文件描述符操作文件, 功能相同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197084.html

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

相关文章

Android 电源管理各个版本的变动和限制

由于Android设备的电池容量有限&#xff0c;而用户在使用过程中会进行各种高耗电操作&#xff0c;如网络连接、屏幕亮度调节、后台程序运行等&#xff0c;因此需要通过各种省电措施来优化电池使用‌&#xff0c;延长电池续航时间&#xff0c;提高用户体验&#xff0c;并减少因电…

数据结构-八大排序之堆排序

堆排序 1.1 基础知识 原理&#xff1a; 1. 利用完全二叉树构建大顶堆 2. 堆顶元素和堆底元素进行交换&#xff0c;除堆底元素之外其余元素继续构建大顶堆 3. 重复2&#xff0c;直到所有元素都不参与构建 整个数组排序完成 完全二叉树&#xff1a; 数据从上到下&#x…

八大排序--05堆排序

假设数组 arr[] {5,7,4,2,0,3,1,6},请通过插入排序的方式&#xff0c;实现从小到大排列&#xff1a; 方法&#xff1a;①利用完全二叉树构建大顶堆&#xff1b; ②对顶元素和堆底元素进行交换&#xff0c;除堆底元素之外其余元素继续构造大顶堆&#xff1b; ③重复步骤②&…

2k1000LA iso 镜像的制作

问题: 已经有了buildroot ,内核也调试好了,但是没有loongnix 镜像。 首先是网上下载镜像,看看能不能用 首先是现在 网上的 iso 镜像进行烧写测试。 安装 7z 解压软件 进行U盘的烧写。 进行系统安装测试: <

视频剪辑软件推荐电脑版:这5款剪辑软件不容错过!

在视频剪辑领域&#xff0c;选择合适的软件至关重要。不同的软件各有千秋&#xff0c;有的简单易用&#xff0c;适合新手快速上手&#xff1b;有的功能强大&#xff0c;适合专业团队进行深度编辑。以下是一些电脑版视频剪辑软件的推荐&#xff0c;涵盖了从新手到专业级别的不同…

【RAG】HiQA:一种用于多文档问答的层次化上下文增强RAG

前言 文档领域的RAG&#xff0c;之前的工作如ChatPDF等很多的RAG框架&#xff0c;文档数量一旦增加&#xff0c;将导致响应准确性下降&#xff0c;如下图&#xff1b;现有RAG方法在处理具有相似内容&#xff08;在面对大量难以区分的文档时&#xff09;和结构的文档时表现不佳…

人才画像系统是什么?有哪些功能和作用?

人才画像系统是一种先进的人力资源管理工具&#xff0c;它运用大数据和人工智能技术对员工的多方面特征进行深度分析。系统通过汇聚个人的教育背景、工作经验、技能掌握、性格特质及行为数据等信息&#xff0c;结合数据挖掘和机器学习算法&#xff0c;构建出每位员工的数字化“…

openEuler 22.03 (LTS-SP3)上安装mysql8单机版

一、目标 在openEuler 22.03 (LTS-SP3) 上安装 mysql 8.0.23 单机版 二、安装 1、下载二进制包 MySQL :: Download MySQL Community Server (Archived Versions) 下载页面 下载链接 https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.23-linux-glibc2.12-x86…

新生培训 day1 C语言基础 顺序 分支 循环 数组 字符串 函数

比赛地址 b牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ C语言数据类型 字符 整型数 int 2e9 long long 9e18 浮点数 代码示例 /** Author: Dduo * Date: 2024-10-8* Description: 新生培训day1 */ #include <stdio.h>int main() {// 定义变量in…

【2024.10.8练习】宝石组合

题目描述 题目分析 由于是求最值&#xff0c;原本考虑贪心&#xff0c;但由于算式过于复杂&#xff0c;首先考虑对算式化简。 进行质因数分解&#xff1a; 因此: 不妨设对于每个&#xff0c;&#xff0c;则上式可化简为&#xff1a; 即 用Vene图也可以求出同样结果。 可是以…

DepthB2R靶机打靶记录

一、靶机介绍 下载地址&#xff1a;https://download.vulnhub.com/depth/DepthB2R.ova 二、信息收集 根据靶机主页显示&#xff0c;确认靶机ip为192.168.242.132 端口扫描 nmap -p- -A 192.168.242.132 发现只开放了8080端口 用dirsearch扫个目录 apt-get update apt-get …

胤娲科技:机械臂「叛逃」记——自由游走,再悄然合体

夜深人静&#xff0c;你正沉浸在梦乡的前奏&#xff0c;突然意识到房间的灯还亮着。此刻的你&#xff0c;是否幻想过有一只无形的手&#xff0c;轻盈地飘过&#xff0c;帮你熄灭那盏碍眼的灯&#xff1f; 又或者&#xff0c;你正窝在沙发上&#xff0c;享受电视剧的紧张刺激&am…

RKMEDIA画面质量调节-QP调节

QP是在视频采集编码过程中的量化参数&#xff0c;其值与画面质量成反比&#xff0c;即QP值越大画面质量越小&#xff0c;其具体调整方法如下&#xff1a; typedef struct rkVENC_RC_PARAM_S {RK_U32 u32ThrdI[RC_TEXTURE_THR_SIZE]; // [0, 255]RK_U32 u32ThrdP[RC_TEXTURE_TH…

一致性哈希算法解析

1. 哈希算法 想象我们的网络世界是一个巨大的环形摩天轮&#xff0c;上面有无数的座位&#xff0c;每个座位都代表了一个存储空间。现在&#xff0c;我们需要将三万张照片安排到这个摩天轮的三台机器上。这些机器我们可以想象成三个大车厢&#xff0c;每个车厢可以装载一部分照…

GIS专业的就业前景

地理信息系统&#xff08;GIS&#xff09;作为一门跨学科的领域&#xff0c;随着技术的发展和应用领域的拓宽&#xff0c;其就业前景日益广阔。GIS专业毕业生可以在多个行业中找到合适的职位&#xff0c;并且随着经验的积累&#xff0c;薪资和职业发展空间都相当可观。 1. 就业…

怎么把图片压缩小一点?几个小技巧帮助你轻松压缩图片大小

怎么把图片压缩小一点&#xff1f;几个小技巧帮助你轻松压缩图片大小 压缩图片大小是许多用户在处理照片时的常见需求&#xff0c;特别是在需要上传图片到网页、发送电子邮件或储存时&#xff0c;减小文件大小可以大大提高效率。以下是五款可以帮助你轻松压缩图片大小的软件&a…

能不能给我讲讲redis中的列表

写在文章开头 本文将从redis源码的角度直接分析列表操作指令,因为大部分指令操作细节区别不是很大,同时为了更专注于列表逻辑的分析,所以本文笔者将以双向链表这个数据结构为核心对lrange、lindex、llen、rpush、lpop几个操作展开介绍,希望对你有帮助。 Hi,我是 sharkChi…

泛微OA设置多个人力资源审批人员

泛微OA设置节点审批人员在不同条件下必须都审批才能过流程 在泛微OA中设置审批人员可以有多个设置方式&#xff0c;大部分情况可以根据会签和非会签控制是否需要所有人都审批&#xff0c;例如&#xff1a; 这里选择的会签就是需要这四个人都必须审批流程&#xff0c;这个流程…

台灯哪种灯光对眼睛好?保护眼睛要选央视公认最好的护眼灯

根据最新的文献当中的近视人群的数据我们发现&#xff0c;亚洲人的近视患病率更高&#xff0c;为70-90%&#xff0c;而美国人和欧洲人的近视患病率为30-40%&#xff0c;也就是说&#xff0c;近视的发病率与种族有关。其次跟近视相关的环境因素有很多&#xff0c;主要有近距离工…

微服务架构Gin-etcd-gRPC接合的入门实践

最近在学习微服务&#xff0c;先后学习gRPC、etcd。学习过这两个技术之后&#xff0c;结合Gin框架&#xff0c;简单实现了一个微服务的小demo了。 以下是各技术在微服务架构中的功能。 Gin框架作为网关&#xff0c;外部请求的统一出口。负责将外部的HTTP请求转化为RPC请求&…