C语言与Linux系统文件操作函数大全

news2024/11/25 4:22:13

目录

一、C语言——fopen函数

二、C语言——fwrite函数

三、C语言——fread函数

四、C语言——fseek函数

1、Linux系统——open接口

2、Linux系统——write接口

3、Linux系统——read接口

4、Linux系统——lseek接口


一、C语言——fopen函数

fopen函数是C标准库提供的打开文件的函数。

有2个参数

第一个是要打开的文件(包含路径)

第二个是打开方式。关于打开方式主要有以下这些::

r:  只读方式打开文件,该文件必须存在。

r+:读/写方式打开文件,该文件必须存在。

rb:只读方式打开一个二进制文件,该文件必须存在。

rb+:读/写方式打开一个二进制文件,该文件必须存在。

rt:   只读方式打开一个文本文件,该文件必须存在。

rt+: 读/写方式打开一个文本文件,该文件必须存在。

w:  只写方式打开文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

w+:读/写方式打开文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

wb:只写方式打开一个二进制文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

wb+:读/写方式打开一个二进制文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

wt:只写方式打开一个文本文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

wt+:只写方式打开一个文本文件,若文件存在,则覆盖原内容;若文件不存在,创建该文件。

a:  以追加的方式打开只写文件,文件存在时写入数据到文件结尾;文件不存在创建该文件(EOF符保留)

a+:以追加的方式打开读/写文件,文件存在时写入数据到文件结尾;文件不存在创建该文件(EOF符不保留)

ab+:以追加的方式打开读/写二进制文件...

at+: 以追加的方式打开读/写文本文件...

返回值

成功返回一个FILE pointer(文件指针),失败返回NULL。

例子:

     FILE* fp = fopen("bite.txt","wb+");
     if(fp == NULL){
         perror("open");
        return -1;
     }

二、C语言——fwrite函数

size_t fwrite(const void* ptr,size_t size,size_t nmemb,FILE* stream);

fwrite 和 fread函数既可操作文本文件,也可操作二进制文件。

fwrite是将ptr指针指向的数据写到文件流中。

参数:

有4个参数,第一个是ptr指针,指向要写出的数据的内存首地址;第二个是要写出的数据的基本单元大小以字节为单位(如:sizeof(char);第三个是基本单元个数;第四个是打开的文件指针。

返回值:

写入成功返回写入的基本单元个数,写入失败返回0,基本单元个数 != nmemb。

例子:

 23    const  char* data = "Linux so easy!";
 24     size_t ret = fwrite(data,sizeof(char),strlen(data),fp);
 25     if(ret != 1){
 26         printf("fwrite error\n");
 27         return -1;
 28     }

三、C语言——fread函数

size_t fread(const void* ptr,size_t size,size_t nmemb,FILE* stream);

fwrite 和 fread函数既可操作文本文件,也可操作二进制文件。

fread是将文件流中的数据读取到缓冲区ptr。

参数:

第一个是指针ptr,指向缓冲区,第二个是要读取的数据的基本单元大小;第三个是基本单元个数;第四个是打开的文件指针。

返回值:

读取成功返回读取到的基本单元个数,若失败或者读到文件末尾返回0,个数<nmemb。

fread不区分文件结尾和读取错误,可以调用ferror判断错误以及用feof判断文件结尾。

例子:

 32     char buf[1024];
 33     size_t _ret = fread(buf,sizeof(char),strlen(buf)-1,fp);
 34     if(_ret == 1){
 35         printf("%s\n",buf);
 36     }
 37     else{
 38         if(ferror(fp)){
 39             printf("fread error\n");
 40         }
 41         else if(feof(fp)){
 42             printf("end of file\n");
 43         }
 44         return -1;
 45     }

四、C语言——fseek函数

 fseek函数是用来重新定位流上的文件指针的。

参数:

第一个参数是文件流;第二个参数是偏移量,以第三个参数为基准偏移offset个字节位置。

whence为基准有3个:

SEEK_SET(0):文件开头

SEEK_CUR(1):文件当前位置

SEEK_END(2):文件结尾

offset是偏移量,正整数表示正向偏移,负整数表示负向偏移。

例子:fseek(fp,-1L ,SEEK_CUR) 调整文件指针,距文件当前位置-1个偏移量。

           fseek(fp,100L,SEEK_END) 调整文件指针,距文件结尾100个偏移量。

返回值:

成功调整文件指针返回0,失败返回其他值,并且失败不改变文件指针指向。

1、Linux系统——open接口

 open接口有2个,拿第二个来说。

参数:

第一个参数是文件名(包含路径),第二个参数是flags,是打开文件的方式,有一下几种:

O_WRONLY:只写                        O_RDONLY:只读

O_RDWR:读写                            O_CREAT:创建文件

O_TRUNC:已经存在文件清空内容        O_APPEND:追加写入

可以组合使用,用 | 组合。

例子:

 19     int fd = open("./bite.txt",O_RDWR | O_CREAT,0664);                                                                           
 20     if(fd < 0){                                                                                                                  
 21         perror("open");                                                                                                          
 22         return -1;                                                                                                               
 23     }  

返回值:

返回一个整数文件描述符fd,>0 打开成功;<0 打开失败。

2、Linux系统——write接口

write接口向打开的文件中写入数据。

参数:

第一个参数fd:文件描述符,代表要写入的文件;第二个参数buf,要写入的数据缓冲区,注意void*,按字节写入;第三个参数count,要写入的字节数。

 返回值:

写入成功,返回写入的字节数;失败,返回-1.

例子:

 5     const char* data = "i like Linux!";
 26     ssize_t ret = write(fd,data,strlen(data));
 27     if(ret == -1){
 28         printf("write error\n");
 29         return -1;
 30     }

3、Linux系统——read接口

read接口读取文件中的数据放到缓冲区。

参数:

第一个参数fd:文件描述符,代表要读取的文件;第二个参数buf,要放入数据的缓冲区,注意void*;第三个参数count,字节数。

 返回值:

读取成功,返回读到的字节数;失败,返回-1;到达文件结尾返回0

例子:

 34     char buf[1024];
 35     ssize_t _ret = read(fd,buf,strlen(buf)-1);
 36     if(_ret == 0){
 37         printf("end of file\n");
 38         return -1;
 39     }
 40     else if(_ret < 0){
 41         perror("read error\n");
 42         return -1;
 43     }
 44     fprintf(stdout,"%s\n",buf);

4、Linux系统——lseek接口

 重新定位流上的文件指针。

参数与上文fseek几乎一致,不再赘述。

返回值:

off_t :指示文件偏移量,32位下为long类型,默认为32位整数,64位下为long long,64位整数。

成功返回从头部开始计算的位置偏移量(以字节为单位);错误返回-1 。

例子:

  lseek(fd,0,SEEK_SET);

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

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

相关文章

FreeRTOS入门(02):任务基础使用与说明

文章目录目的创建任务任务调度任务控制延时函数任务句柄获取与修改任务优先级删除任务挂起与恢复任务强制任务离开阻塞状态空闲任务总结目的 任务&#xff08;Task&#xff09;是FreeRTOS中供用户使用的最核心的功能&#xff0c;本文将介绍任务创建与使用相关的基础内容。 创…

QT入门Containers之QTabWidget

目录 一、QTabWidget界面相关 1、布局介绍 2、更改选项卡的名字 3、设置关闭图标 4、代码测试新增页面在构造函数中添加 5、添加图标 6、常用设置 此文为作者原创&#xff0c;创作不易&#xff0c;转载请标明出处&#xff01; 一、QTabWidget界面相关 1、布局介绍 选项…

MySQL 数据库基础命令

MySQL 基础命令 一.了解数据库 1、了解数据库对象 1.表&#xff1a; 用于以有组织方式存储数据。以行和列的格式包含数据。 2.索引&#xff1a; 是内部表结构&#xff0c;MySQL 用它基于一列或多列的值来提供对表中各行的快速访问。 3.视图&#xff1a; 是虚拟表&#…

Netcat安装与使用(nc)

Netcat安装与使用1.Netcat简介1.1.Netcat安装1.1.1.安装整体流程1.1.1.1.安装依赖1.1.1.2.安装Netcat1.1.1.3.配置环境变量1.1.1.4.测试1.2.Netcat基本功能1.3.Netcat常用参数2.Netcat用法2.1.前期准备2.2.banner相关信息抓取2.3.端口扫描2.3.1.扫描指定端口2.3.2.扫描指定端口…

springboot启动图案的修改方法

目录 一、springboot项目启动原图 二、如何修改为你心意的图片 1、首先在resource下创建banner.txt这是默认的名字 2、在banner.txt文件中加入你自己的配置 3、生成的图案 4、推荐几个生成的网址 5、修改字符颜色 6、控制Banner的是否开启、输出位置 第一种&#xff1a; …

yarn的global安装命令不生效

问题 yarn全局安装某个依赖完成之后&#xff0c;但依赖没有生效&#xff0c;一般有两种情况导致的。 解决思路 1.yarn命令问题 yarn在全局安装某个依赖时&#xff0c;global要紧接在yarn之后&#xff0c;然后才是add yarn global add xxxx如果出现global在add之后&#xff…

JAVASE半天速通集锦(only 40点,查找and复习必看)

JAVASE 以下内容根据【尚硅谷】7天搞定Java基础&#xff0c;Java零基础极速入门 视频简单总结而成 所谓变量就是可以改变的向量存储&#xff1b;标识符即标识数据的符号——变量名&#xff1a;只有下划线和$&#xff0c;预定义关键字或保留字不给用 基本数据类型 byte 8,sho…

诚邀您体验人工智能AI

近期&#xff0c;人工智能&#xff08;AI&#xff09;领域动作频频&#xff0c;OPENAI公司Chat GPT的出现&#xff0c;标志着人工智能的研究与应用已经进入了一个崭新的发展阶段&#xff0c;国内腾讯、阿里巴巴、百度、易网、国外微软、谷歌、苹果、IBM、Amazon&#xff0c;等互…

数据结构---顺序表

专栏&#xff1a;数据结构 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;从零开始&#xff0c;数据结构&#xff01;&#xff01; 顺序表前言接口实现SListInit初始化和SListDestory销毁SListPrint打印表中的元素SListCheckCapacity检查表中空间SListPushBack尾插和SListP…

【项目设计】高并发内存池(一)[项目介绍|内存池介绍|定长内存池的实现]

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…

IPVlan 详解

文章目录简介Ipvlan2同节点 Ns 互通Ns 内与宿主机 通信第三种方法Ns 到节点外部结论Ipvlan31. 同节点 Ns 互通Ns 内与宿主机 通信Ns 内到外部网络总结源码分析ipvlan 收包流程收包流程主要探讨使用 ipvlan 为 cni 通过虚拟网卡的实现。简介 ipvlan 和 macvlan 类似&#xff0c…

深度学习入门(六十七)循环神经网络——注意力机制

深度学习入门&#xff08;六十七&#xff09;循环神经网络——注意力机制前言循环神经网络——注意力机制课件心理学注意力机制注意力机制是显式地考虑随意线索非参注意力池化层Nadaraya-Watson 核回归&#xff1a;总结教材&#xff08;注意力提示&#xff09;1 生物学中的注意…

数据库系统:2. 关系数据库

更好的阅读体验\huge{\color{red}{更好的阅读体验}}更好的阅读体验 文章目录2.1 关系数据结构及形式化定义2.1.1 关系域笛卡尔积关系码三类关系基本关系的性质2.1.2 关系模式2.1.3 关系数据库2.1.4 关系模型的存储结构2.2 关系操作2.2.1 基本的关系操作2.2.2 关系数据语言的分类…

[visual studio]中,关于如何 【调试】 的问题 及 技巧

我们都知道&#xff0c;不会调试的程序员不是一个合格的程序员。 在初学阶段&#xff0c;由于对于语法的不熟悉&#xff0c;我们可能会写出很多语法错误&#xff0c;无法通过编译&#xff0c;编译器会报错&#xff0c;这种错误很好修改。 但是&#xff0c;随着我们不断敲代码…

当面试官问“你的SQL能力怎么样”时,怎么回答才不会掉进应聘陷阱?

在某平台看到一个比较实际的问题&#xff0c;在这里分享给职场新人。 SQL已经是职场最常用的一种编程语言&#xff0c;所以应聘技术或非技术岗位&#xff0c;都可能会被问道一个问题&#xff1a;你的SQL能力怎么样&#xff1f; 对于职场新人来说&#xff08;SQL高手可以无视下…

JavaScript事件循环

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库一、异步执行原理1. 单线程的JavaScript我们知道&#xff0c;JavaScript是一种单线程语言&#xff0c;它主要用来与用户互动&#xff0c;以及操…

50-Jenkins-Lockable Resources插件实现资源锁定

Lockable Resources插件实现资源锁定前言安装插件使用插件资源配置Pipeline中使用前言 用来阻止多个构建在同一时间试图使用同一个资源。这里的资源可能是一个节点、一个代理节点、一组节点或代理节点的集合&#xff0c;或者仅仅是一个用于上锁的名字。如果指定的资源没有在全…

ASP.NET MVC | 创建应用程序

目录 首先 NO.1 No.2 App_Data 文件夹 Content 文件夹 Controllers 文件夹 Models 文件夹 Views 文件夹 Scripts 文件夹 最后 首先 一步一步的来&#xff0c;电脑上需要安装vs2019软件&#xff0c;版本高低无所谓&#xff0c;就是功能多少而已。 长这样的&#xff0…

无公网IP如何外网异地登录访问电商进销存系统?

电商进销存系统软件是电商企业必备的重要软件之一。 集订单管理、货品管理、采购管理等功能于一体&#xff0c;主要帮助广大电商用户实现准确、高效的订单处理及精细化的仓储管理。 电商进销存系统软件一般采用B/S结构&#xff0c;用户可在异地访问系统、查看货品库存及管理订…

第五期(2022-2023)传统行业云原生技术落地调研——金融篇 现已开启

随着数字化浪潮的来临&#xff0c;云原生技术正在改变着各行各业&#xff0c;通过IT变革驱动业务创新发展&#xff0c;促进企业自身以及产业生态的转型升级。 因此&#xff0c;灵雀云联合云原生技术实践联盟&#xff08;CNBPA&#xff09;和行业内头部厂商F5&#xff0c;共同发…