Linux:文件IO介绍

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.xdnf.cn/news/1557645.html

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

相关文章

等级保护等保资料原件合集(word源资料)

第二章 系统定级与安全域 2.1 系统定级 2.1.1 不同等级的安全保护能力 2.1.2 重要信息系统 2.1.3 定级参考 2.2 安全域定义 2.2.1 安全域定义方法 2.2.2 安全域等级描述 第三章 实施方案设计 3.1 三级等保要求 3.2 基本要求的详细技术要求 3.2.1 物理安全 3.2.2 网…

Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】

该文章专栏是向QFrameWork作者凉鞋老师学习总结得来&#xff0c;吃水不忘打井人&#xff0c;不胜感激 Unity 框架搭建学习笔记1-1&#xff0c;前一个1代表凉鞋的第一季教程&#xff0c;后一个1代表该季第一篇我的文章 unity中对象调用的三种方式 方法调用&#xff0c;例如&…

Qt设计登录界面

优化登录框&#xff1a; 将两个按钮连接到槽函数 在构造函数中定义 connect(this->btn1,&QPushButton::clicked,this,&Logon::my_slot);connect(this->btn2,&QPushButton::clicked,this,&Logon::my_cancel); 定义登录按钮连接的槽函数 void Logon::my…

基于Java语言的充电桩平台+云快充协议+充电桩管理后台+充电桩小程序

软件架构 1、提供云快充底层桩直连协议&#xff0c;版本为云快充1.5&#xff0c;对于没有对接过充电桩系统的开发者尤为合适&#xff1b; 2、包含&#xff1a;启动充电、结束充电、充电中实时数据获取、报文解析、Netty通讯框架、包解析工具、调试器模拟器软件等&#xff1b;…

CMake 属性之目标属性

【写在前面】 CMake 可以通过属性来存储信息。它就像是一个变量&#xff0c;但它被附加到一些其他的实体上&#xff0c;像是一个目录或者是一个目标。例如一个全局的属性可以是一个有用的非缓存的全局变量。 在 CMake 的众多属性中&#xff0c;目标属性 ( Target Properties ) …

NodeJS智慧社区管理微信小程序-计算机毕业设计源码40623

摘 要 随着中国经济的飞速增长&#xff0c;消费者的智能化水平不断提高&#xff0c;许多智能手机和相关的软件正在得到更多的关注和支持。其中&#xff0c;智慧社区管理微信小程序更是深得社区人员的喜爱&#xff0c;它的出现极大地改善了社区人员的生活质量&#xff0c;同时&…

宠物咖啡馆在线体验:SpringBoot框架的创新应用

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

云微客AI直播矩阵,让小白轻松上手的必备直播利器

现在直播带货都已经杀疯了&#xff0c;在新趋势下&#xff0c;AI智能直播应运而生。AI智能直播相较于传统直播&#xff0c;直播模式对于场地的要求和人员的要求都相对较低&#xff0c;大大降低了我们的试错成本&#xff0c;同时直播矩阵系统也为企业和个人带来了低成本、高效率…

浅析基于双碳目标的光储充一体化电站状态评估技术

摘要&#xff1a;全国碳市场拉开了我国能源结构加速转型的大幕&#xff0c;催生了光伏、储能和新能源汽车等一批绿色产业的兴起&#xff0c;同时随着利好政策扶植和消费者的青睐&#xff0c;光伏、储能和新能源汽车市场均加快发展。但传统的充电桩和光伏电站都是分开建设&#…

如何在电脑上创建虚拟网卡

1.右键点击此电脑&#xff0c;选择——管理 2.选择设备管理器——网络适配器&#xff0c;在点击操作选择 添加过时硬件 3.点击 下一页 4.在这里选择网络适配器&#xff0c;点击下一页 5.选择微软的环回适配器 6.打开控制面板 7.点击网络和Internet 8.点击网络和共享中心 9…

一个读取CT图像序列,并进行表面重建的C++代码

这篇文章中&#xff0c;介绍使用VTK进行读取CT图像&#xff08;一个序列&#xff09;&#xff0c;然后进行表面重建。为什么不使用DCMTK呢&#xff1f;因为使用DCMTK需要一张一张读取&#xff0c;要自己写一个代码&#xff0c;还要创建一个容器来放读入的CT数据&#xff0c;比较…

亳州自闭症寄宿制学校,关注孩子的学习和生活

在特殊教育领域&#xff0c;自闭症儿童的教育与成长一直是社会各界关注的焦点。近年来&#xff0c;随着对自闭症认识的加深&#xff0c;越来越多的寄宿制学校应运而生&#xff0c;致力于为这些特殊的孩子提供全面、个性化的教育服务。在安徽亳州&#xff0c;这样的学校正努力为…

Metasploit渗透测试之后渗透

简介 Metasploit拥有300多个后渗透模块&#xff0c;是渗透测试的最佳框架之一&#xff0c;覆盖了从信息收集到后渗透甚至报告的每个阶段。本章将重点介绍提权、持久化、获取凭证和横向移动等内容。 # 1、后渗透模块 在Metasploit框架升级后&#xff0c;用于自动化后渗透任务…

C++——类和对象(二)

1. 类的默认成员函数 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。⼀个类&#xff0c;我们不写的情况下编译器会默认生成以下6个默认成员函数&#xff0c;需要注意的是这6个中最重要的是前4个&#xff0c;最后两个取地址重载不…

某国有资本运营中心人才选拔项目纪实

某国有资本运营中心人才选拔项目纪实 【客户行业】 政府与事业单位 【问题类型】 人才招聘选拔 【客户背景】 在三年国企改革过程中&#xff0c;南方某省政府为响应国家政策&#xff0c;提出组建专业化国有资本投资运营公司&#xff0c;大力开展专业化资本运营&#xff0c;…

移除元素(算法题分享)

移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以下操作&#xf…

MySQL从0到1基础语法笔记(上)

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java Web关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 MySQL笔记&#xff1a; 一、注释&#xff1a; 二、SQL四大类&#xff…

什么是安全漏洞?最全的漏洞分类!

01 — “ 什么是漏洞**”** 漏洞是指一个系统存在的弱点或缺陷&#xff0c;系统对特定威胁攻击或危险事件的敏感性&#xff0c;或进行攻击的威胁作用的可能性。漏洞可能来自应用软件或操作系统设计时的缺陷或编码时产生的错误&#xff0c;也可能来自业务在交互处理过程中的设…

丝杆支撑座预压标准解析

丝杆支撑座预压的主要目的是提高轴的旋转精度、刚性和运行性能&#xff0c;同时防止轴在运转过程中产生震动和异响&#xff0c;从而提高系统的整体精度和稳定性。那么&#xff0c;丝杆支撑座的预压标准是什么呢&#xff1f; 丝杆支撑座的预压可以分为标准型轻预压和标准型重预压…

自动生成实体类,mapper类,mapper.xml文件

使用mybatis generator&#xff08;无需安装&#xff0c;对于外网有限制的真的很友好&#xff09; 1. 在pom文件中配置mysql相关依赖&#xff0c;并添加plugin <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId…