C/C++文件IO常用函数总结

文章目录

  • 1. 文件描述符
  • 2. 文件IO常用函数
    • 2.1打开文件:open
    • 2.2 关闭文件:close
    • 2.3 读写操作:read/write
    • 2.4 关于光标的操作:lseek

1. 文件描述符

  • 文件描述符的本质是一个大于等于0的整数,在使用open函数打开文件时,就会产生一个用于操作文件的句柄,这就是文件描述符。
  • 在一个进程中,能够打开的文件描述符是有限制的,一般是1024个,[0,1023],可以通过指令 ulimit -a进行查看,如果要更改这个限制,可以通过指令 ulimit -n 数字,进行更改。
  • 文件描述符的使用原则一般是最小未分配原则。
  • 特殊的文件描述符:0、1、2,这三个文件描述符在一个进程启动时就默认被打开了,分别表示标准输入、标准输出、标准错误

2. 文件IO常用函数

2.1打开文件:open

  1. 函数介绍:
#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);
/*
功能:打开或创建一个文件,并返回该文件的文件描述符,返回文件描述符的规则是最小未分配原则 
参数1:要打开的文件文件路径参数2:打开模式 以下三种方式必须选其一:O_RDONLY(只读)、O_WRONLY(只写)、O_RDWR(读写)
除了上面三个参数之外,以下的打开方式可以有零个或多个,跟上述的方式一起用位或运算连接到一起。
O_CREAT:用于创建文件,如果文件不存在,则创建文件,如果文件存在,则打开文件,如果flag中包含了该模式,则函数的第三个参数必须要加上。
O_APPEND:以追加的形式打开文件,光标定位在结尾。
O_TRUNC:清空文件。
O_EXCL:常跟O_CREAT一起使用,确保本次要创建一个新文件,如果文件已经存在,则open函数报错。参数3:如果参数2中的flag中有O_CREAT时,表示创建新文件,参数3就必须给定,表示新创建的文件的权限。 如果当前参数给定了创建的文件权限,最终的结果也不一定是参数3的值。系统会用你给定的参数3的值,与系统的umask取反的值进行位与运算后,才是最终创建文件的权限,即:(mode & (~umask))返回值:成功返回打开文件的文件描述符,失败返回-1并置位错误码。
*/

普通文件的权限一般为:0644,表示当前用户没有可执行权限,当前组中其他用户和其他组中的用户都只有读权限;目录文件的权限一般为:0755,表示当前用户具有可读、可写、可执行,当前组中其他用户和其他组中的用户都没有可写权限。
注意:如果不给权限,那么当前创建的权限会是一个随机值。

补充1:Linux下文件权限相关内容(包含对数字的解释)

Linux下文件权限相关内容

补充2:fopen()open()对应参数

在这里插入图片描述

2.2 关闭文件:close

  1. 函数介绍:
#include <unistd.h> int close(int fd); 
/*
功能:关闭文件描述符对应的文件 
参数:文件描述符 
返回值:成功返回0,失败返回-1并置位错误码
*/
  1. 示例代码:
#include<myhead.h> int main(int argc, const char *argv[]) 
{ //1、定义文件描述符,对于文件IO而言,句柄就是文件描述符 int fd = -1; //以只读的形式创建文件,如果文件不存在则创建文件 //如果创建文件时没有给权限,则该文件的权限是随机权限 //如果创建文件时,给定了文件的权限,则文件最终的权限是 给定的 mode & (~umask)if((fd = open("./tt.txt", O_WRONLY|O_CREAT, 0644)) == -1) { perror("open error"); return -1; }printf("open success fd = %d\n", fd); //3,由于0、1、2已经被使用,所以该数为3//关闭文件 close(fd); //关闭fd引用的文件 return 0; 
}

2.3 读写操作:read/write

函数介绍:

#include <unistd.h> ssize_t read(int fd, void *buf, size_t count);
/*
功能:从fd文件描述符引用的文件中读取count的字符放入buf对应的容器中 
参数1:已经打开文件对应的文件描述符 
参数2:容器的起始地址 
参数3:要读取的字符个数 
返回值:成功返回读取的字符个数,这个个数可能会小于count的值,失败返回-1并置位错误码
*/#include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); 
/*
功能:将buf容器中的count个数据,写入到fd引用的文件中 
参数1:已经打开的文件的文件描述符 
参数2:要写入的数据的起始地址 
参数3:要写入数据的个数 
返回值:成功返回写入的字符个数,这个个数可能小于count,失败返回-1并置位错误码
*/

2.4 关于光标的操作:lseek

函数介绍:

#include <sys/types.h> 
#include <unistd.h> off_t lseek(int fd, off_t offset, int whence); 
/*
功能:移动光标的位置,并返回光标现在所在的位置 
参数1:文件描述符 
参数2:偏移量>0:表示从指定位置向后偏移n个字节 ><0:表示从指定位置向前偏移n个字节 >=0:在指定位置处不偏移 
参数3:偏移的起始位置 SEEK_SET:文件起始位置 SEEK_CUR:文件指针当前位置 SEEK_END:文件结束位置 
返回值:光标现在所在的位置 
*/

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

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

相关文章

pychar安装、pychon安装、pycharm超过试用期30激活

如果pycharm超过试用期&#xff0c;可以双击vbs脚本重新激活 百度网盘&#xff1a; 链接: https://pan.baidu.com/s/1B-XyLOy3wjVWbJwuvZOHOw?pwdmsb6 提取码: msb6

【学术会议征稿】第六届经济管理与模型工程国际学术会议(ICEMME 2024)

第六届经济管理与模型工程国际学术会议&#xff08;ICEMME 2024&#xff09; 2024 6th International Conference on Economic Management and Model Engineering 第六届经济管理与模型工程国际学术会议&#xff08;ICEMME 2024&#xff09;将于2024年11月22-24日在中国大连…

Bugku-web-Flask_FileUpload

Bugku-web-Flask_FileUpload 查看源代码&#xff0c;提示用python返回结果 在file.jpg中写python代码 import os os.system(ls / )上传后查看源代码&#xff0c;找到flag文件夹 修改代码 import os os.system(cat /flag )

STM32的外部中断实现按键控制led灯亮灭(HAL库)

一&#xff1a;stm32外部中断概述 1&#xff1a;stm32的外部中断线 STM32的每个IO都可以作为外部中断输入。 STM32的中断控制器支持19个外部中断/事件请求&#xff1a; 线0~15&#xff1a;对应外部IO口的输入中断。 线16&#xff1a;连接到PVD输出。 线17&#xff1a;连接到R…

鸿蒙应用框架开发【首选项】 本地数据与文件

首选项 简介 本示例使用ohos.data.preferences接口&#xff0c;展示了使用首选项持久化存储数据的功能。 效果预览 使用说明 1.点击顶部titleBar的右侧切换按钮&#xff0c;弹出主题菜单&#xff0c;选择任意主题则切换相应的主题界面&#xff1b; 2.退出应用再重新进入&a…

智能合约中approve函数详解

场景 这段时间很多小伙伴加我、都咨询到了一个类似的业务场景、 如下&#xff1a; 1、第一步业务里面调用授权函数approve 、给指定address2、第二步是由授权的address调用transferFrom转移给指定的接受地址。 案例DEMO如下&#xff08;这里test2肯定是会执行失败的&#xff…

相机标定(Camera Calibration)

什么是 相机标定&#xff08;Camera Calibration&#xff09;&#xff1f; 相机标定&#xff08;CameraCalibration&#xff09;是确定相机内部参数&#xff08;如焦距、光学中心、畸变系数等&#xff09;和外部参数&#xff08;如相机在世界坐标系中的位置和姿态&#xff09;的…

Jackson常用注解详解

Hi &#x1f44b;, Im shy 有人见尘埃&#xff0c;有人见星辰 Jackson常用注解详解 文章目录 Jackson常用注解详解0. 引入依赖1. JsonProperty2. JsonIgnore3. JsonFormat4. JsonInclude5. JsonCreator6. JsonValue7. JsonIgnoreProperties结论 Jackson是Java生态系统中广泛…

【Canvas与艺术】三环莫比乌斯圈

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>三环莫比乌斯圈</title><style type"text/css"&g…

插单现象对PMC造成的影响有哪些?

插单&#xff0c;即在生产制造过程中&#xff0c;客户或其他部门临时增加订单&#xff0c;这一行为如同战场上的突袭&#xff0c;让生产与物料控制&#xff08;PMC&#xff09;部门措手不及&#xff0c;面临着前所未有的压力和挑战。那么&#xff0c;插单现象究竟对PMC造成了哪…

【MATLAB源码-第239期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 孔雀优化算法&#xff08;Peafowl Optimization Algorithm&#xff0c;简称POA&#xff09;以孔雀&#xff08;peafowl&#xff09;的求偶展示行为为灵感&#xff0c;通过模拟这一过程来解决复杂的优化问题。以下是对孔雀优化…

深度揭秘——TCP/IP协议

今天我们要深入探讨一个关键的网络基础知识——TCP/IP协议。无论你是刚接触网络技术的新手&#xff0c;还是希望加深理解的老手&#xff0c;本文都将为你提供全面且易懂的介绍。 TCP/IP协议是一组用于互联网的通信协议的集合&#xff0c;包含了传输控制协议&#xff08;TCP&am…

大数据信用报告查询会不会留下查询记录?怎么选择查询平台?

最近有不少网友都在咨询一个问题&#xff0c;那就是大数据信用报告查询会不会留下查询记录&#xff0c;会不会对自己的征信产生影响&#xff0c;下面本文就详细为大家介绍一下&#xff0c;希望对你了解大数据信用有帮助。 首先、大数据信用与人行征信是独立的 很多人只知道人行…

哪款加密软件好用点?迅软DSE加密软件如何?

在选择加密软件时&#xff0c;好用与否往往取决于多个因素&#xff0c;包括&#xff1a;软件的功能、稳定性、安全性、易用性、兼容性以及性价比等。 针对大家提到的迅软DSE加密软件&#xff0c;以下是一些详细的分析&#xff1a; 一、功能全面 迅软DSE加密系统集成了文件加密…

编译环境搭建(Linux)

0 Preface/Foreword 0.1 System requirement Airoha编译环境&#xff0c;对于Linux distro&#xff0c;建议使用Ubuntu 18.04 1 环境搭建 1.1 Create a working folder 在Linux中&#xff0c;创建一个文件夹&#xff0c;用来存放Airoha释放过来的开发工具链安装包。 博主当…

[数据集][目标检测]船上翻越栏杆危险行为检测数据集VOC+YOLO格式3678张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3678 标注数量(xml文件个数)&#xff1a;3678 标注数量(txt文件个数)&#xff1a;3678 标注…

Linux中新添加的磁盘信息不显示-主动扫盘(刷新磁盘状态)

在Linux系统中&#xff0c;当你新添加了一个磁盘&#xff08;无论是通过物理添加还是虚拟化环境&#xff09;&#xff0c;你可能需要让系统识别这个新磁盘&#xff0c;并且可能需要更新或“刷新”磁盘的状态。这通常涉及到几个步骤&#xff0c;但没有一个直接的“刷新磁盘状态”…

CANoe:System Variables模块介绍

写了这么多文章介绍CANoe的功能和使用,发现竟然没有介绍系统变量模块的,这么重要的功能当然要单独写一篇文章介绍啦! 系统变量为CANoe提供了除数据库、环境变量外的另一种数据配置方式。在系统变量模块中定义的各种数据类型的变量,可以被CANoe其他模块或CAPL程序所引用。 …

四,系统规划

一&#xff0c;企业系统规划法BSP&#xff08;2009、2010、2018&#xff0c;步骤以及优缺点、用到的工具&#xff09; 企业系统规划法&#xff08;Business Systems Planning&#xff0c;BSP&#xff09;是IBM公司20世纪70年代提出的一种结构化的信息系统规划方法。该方法通过…