Linux文件编程(标准C库)

目录

一、标准C库打开/创建文件,读写文件,光标移动

二、标准C库写入结构体到文件

三、其他函数补充

1.fputc函数

2.feof函数和fgetc函数


前面讲到的open函数都是基于linux内核的,也就是说在Windows系统上无法运行,移植性比较差,但标准C库同样有一套对文件进行操作的函数。

一、标准C库打开/创建文件,读写文件,光标移动

打开文件函数:

#include <stdio.h>FILE *fopen(const char *path, const char *mode);

返回值为FILE类型的文件流,第一个参数是文件的路径,第二个参数是用什么权限打开文件,权限如下:
 

写入文件函数:

#include <stdio.h>size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

第一个参数是缓存区,第二个参数表示我们要写入的每个数据的大小(例如要写入一个字符串,那么size=sizeof(char),表示一个字符的大小),第三个参数是个数,第四个选择哪个文件,传入fopen函数的返回值即可

读取文件函数:

#include <stdio.h>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

参数含义和写入文件的函数类似 

光标移动函数:

#include <stdio.h>int fseek(FILE *stream, long offset, int whence);

代码示例: 

#include <stdio.h>
#include <string.h>int main()
{FILE *fp;//存储fopen的返回值char *str = "Hello World!";char readBuf[128]={0};//存放读取到的数据fp = fopen("./li.txt","w+");//因为第二个参数要传入指针,所以用双引号fwrite(str,sizeof(char),strlen(str),fp);fseek(fp,0,SEEK_SET);//光标复位fread(readBuf,sizeof(char),strlen(str),fp);printf("read data:%s\n",readBuf);return 0;
}

可以看到标准C库的文件相关函数和Linux的函数是差不多的,标准C库对不同文件的操作是获取它的FILE类型的指针,而Linux是int类型的文件描述符,这些函数都可以类比Linux的函数来记忆。

运行结果: 


二、标准C库写入结构体到文件

代码示例:

#include <stdio.h>
#include <string.h>struct Test{int a;char c;
};int main()
{FILE *fp;struct Test data={100,'a'};struct Test data2;fp = fopen("./file1","w+");int n_write = fwrite(&data,sizeof(struct Test),1,fp);	fseek(fp,0,SEEK_SET);int n_read = fread(&data2,sizeof(struct Test),1,fp);printf("read %d,%c\n",data2.a,data2.c);fclose(fp);return 0;
}

这里的代码都可以类比我的上一篇文章Linux文件编程应用,只不过函数的参数和返回值不太相同,能看懂上一篇文章,那么这一篇就只是对C语言的巩固,这里解释一下fwrite函数和fread函数第二个和第三个参数的含义:拿上面代码举例,每次写都写入一个结构体类型的数据大小,用sizeof计算,第三个参数表示写了几次,这里写一次就行了。
运行结果:


三、其他函数补充

1.fputc函数

#include <stdio.h>int fputc(int c, FILE *stream);

fputc函数可以写入一个字符或整数到文件里,用fopen函数得到文件的返回值传入fputc的第二个参数即可,要写入多个数据用循环的方式写入即可。 
代码示例:

#include <stdio.h>
#include <string.h>int main()
{FILE *fp;char *str="Hello World!";int i;int len=strlen(str);fp=fopen("./file1","w+");for(i=0;i<len;i++){fputc(*str,fp);str++;}fclose(fp);return 0;
}

2.feof函数和fgetc函数

feof函数:

#include <stdio.h>int feof(FILE *stream);

fgetc函数:

#include <stdio.h>int fgetc(FILE *stream);

这两个函数可以组合在一起用,见代码示例:

#include <stdio.h>
#include <string.h>int main()
{FILE *fp;	char c;fp = fopen("./li.txt","r");while(!feof(fp))// nonezero if reach end of file{c = fgetc(fp);printf("%c",c);}fclose(fp);return 0;
}

我们先用只读的方式打开li.txt文件,feof可以作为条件判断,当读到文件的尾部时,feof函数的返回值为0,在while循环里使用fgetc函数一个一个字符读取fp所指向的文件。(至于为什么不会一直读文件的同一个位置,应该就和这两个函数有关)

以上就是Linux引入标准C库对文件操作的函数,看了前面两个文章,再看这篇会很好理解,用标准C库来写代码无非就是移植性比较好,以后在Linux学习过程中,很多时候还是要用到Linux的函数。接下来我会更新Linux进程编程的学习笔记,希望大伙一起讨论学习!

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

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

相关文章

使用simulink进行esp32开发,进行串口收发数据需要注意的地方,为什么收发不成功

1&#xff0c;主要是因为simulink里的配置文件配置的波特率和串口接受软件配置的波特不一致导致的 2&#xff0c;主要有以下三个界面 a.配置文件 b.模型 模型直接选择使用的是那组串口就行了&#xff0c;一般情况下我们收发使用同一组就可以&#xff0c;这样收发模块填写的端…

20240711编译友善之臂的NanoPC-T6开发板的Buildroot

20240711编译友善之臂的NanoPC-T6开发板的Buildroot 2024/7/11 21:02 百度&#xff1a;nanopc t6 wiki https://wiki.friendlyelec.com/wiki/index.php/NanoPC-T6/zh NanoPC-T6/zh 4.4 安装系统 4.4.1 下载固件 4.4.1.1 官方固件 访问此处的下载地址下载固件文件 (位于网盘的&q…

【Python】已解决:ModuleNotFoundError: No module named ‘sklearn.cross_validation

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 &#xff08;机器学习分割数据问题&#xff09;解决“ModuleNotFoundError: No module named ‘sklearn.cross_validation’” 一、问题背景 在机器学习的实践中&#xff0c;数据分割是…

CSS技巧专栏:一日一例 4.纯CSS实现两款流光溢彩的酷炫按钮特效

大家好&#xff0c;今天是 CSS技巧专栏&#xff1a;一日一例 第三篇《纯CSS实现两款流光溢彩的酷炫按钮特效》 先看图&#xff1a; 特此说明&#xff1a; 本专题专注于讲解如何使用CSS制作按钮特效。前置的准备工作和按钮的基本样式&#xff0c;都在本专栏第一篇文章中又详细…

Python基础教学之四:面向对象编程——迈向更高级编程

Python基础教学之四&#xff1a;面向对象编程——迈向更高级编程 一、面向对象编程概念 1. 类和对象 定义&#xff1a;在面向对象编程(OOP)中&#xff0c;类是创建对象的模板&#xff0c;它定义了对象的属性和方法。对象是类的实例&#xff0c;具体存在的实体&#xff0c;拥有…

【JavaScript 报错】未捕获的范围错误:Uncaught RangeError

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、错误原因分析1. 递归调用次数过多2. 数组长度超出限制3. 数值超出允许范围 二、解决方案1. 限制递归深度2. 控制数组长度3. 检查数值范围 三、实例讲解四、总结 Uncaught RangeError 是JavaScript中常见的一种错误&…

347. 前 K 个高频元素(中等)

347. 前 K 个高频元素 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;347. 前 K 个高频元素 2.详细题解 寻找出现频率前 k k k高的元素&#xff0c;因此需要先统计各个元素出现的次数&#xff0c;该步骤时间复杂度为 O ( n ) O(n) O(n)…

C++模板总结

文章目录 写在前面1. 函数模板1.1 函数模板的概念1.2 函数模板的原理1.3 函数模板的实例化1.4 函数模板的实例化模板参数的匹配原则 2. 类模板3. 非类型模板参数4. 模板的特化4.1 概念4.2 函数模板特化4.3 类模板特化 5. 模板分离编译6. 总结 写在前面 进入C以后&#xff0c;C…

智能小车——初步想法

需要参考轮趣的智能小车自己搭建一台智能机器人&#xff0c;这里从底层控制开始逐步搭建。 控制模式 之后要自行搭建智能小车&#xff0c;所以将轮趣的底盘代码进行学习&#xff0c;根据开发手册先大致过一遍需要的内容。 有做很多个控制方法&#xff0c;包括了手柄、串口、…

Linux下常见压缩文件tar.xz、tar.bz2、tar.gz的区别和详解

文章目录 tar.xz tar.bz2 tar.gz 的区别三种文件的解压方式tar.xz的解压三种压缩文件的创建方式 tar.xz tar.bz2 tar.gz 的区别 这三个文件扩展名都表示压缩后的档案文件&#xff0c;但它们使用不同的压缩算法。 tar.xz: tar 代表 Tape Archive&#xff0c;它是一种将多个文件…

【若依管理系统】注意事项

1.前端字段必填 rules: {sceneName: [{ required: true, message: "场景名称不能为空", trigger: "blur" }],orderNum: [{ required: true, message: "显示排序不能为空", trigger: "blur" }], }, 2.IDEA&#xff0c;默认以debug模式…

Agents 要点

一、Agents概念 人类是这个星球上最强大的 Agent。Agent是一个能感知并自主地采取行动的实体&#xff0c;这里的自主性极其关键&#xff0c;Agent要能够实现设定的目标&#xff0c;其中包括具备学习和获取知识的能力以提高自身性能。 关键点&#xff1a;感知环境、自主决策、具…

element plus 实现跨页面+跨tab栏多选

文章目录 element plus 层面数据层面 菜鸟好久没写博客了&#xff0c;主要是没遇见什么很难的问题&#xff0c;今天碰见了一个没有思路的问题&#xff0c;解决后立马来和大家伙分享了&#xff01; 菜鸟今天要实现一个需求&#xff0c;就是&#xff1a;实现跨页面跨 tab栏 多选…

CVE-2024-27292:Docassemble任意文件读取漏洞复现 [附POC]

文章目录 CVE-2024-27292&#xff1a;Docassemble任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 CVE-2024-27292&#xff1a;Docassemble任意文件读取漏洞复现 [附POC] 0x01 前言 …

冒泡排序与其C语言通用连续类型排序代码

冒泡排序与其C语言通用连续类型排序代码 冒泡排序冒泡排序为交换排序的一种&#xff1a;动图展示&#xff1a;冒泡排序的特性总结&#xff1a;冒泡排序排整型数据参考代码&#xff08;VS2022C语言环境&#xff09;&#xff1a; 冒泡排序C语言通用连续类型排序代码对比较的方式更…

法律行业守护神:知识库+AI大模型,解锁企业知识全周期管理

在法律行业中&#xff0c;搭建一个有效的知识库并进行企业知识全生命周期管理确实是一项不小的挑战。法律环境的复杂性和不断变化的法规要求企业必须持续更新和维护其知识库&#xff0c;以确保所有信息的准确性和实时性。 这种系统化的信息管理不仅有助于提高律师和法律顾问的…

打卡第9天-----字符串

我在自学的时候,看了卡尔的算法公开课了,有些题目我就照葫芦画瓢写了一遍js代码,差不多都写出来了,有暴力解法,有卡尔推荐的思路和方法。话不多说,直接上题上代码吧: 一、翻转字符串里的单词 leetcode题目链接:151. 反转字符串中的单词 题目描述: 给你一个字符串 s…

5个自动化面试题,助你过关斩将!

面试时&#xff0c;自动化是软件测试高频面试内容&#xff0c;通过学习和准备面试题&#xff0c;你会对可能遇到的问题有所准备&#xff0c;从而减轻面试时的紧张感&#xff0c;让你在面试中稳操胜券&#xff01; 今天&#xff0c;分享一些在面试中可能会遇到的自动化测试面试…

大学生暑假“三下乡”社会实践工作新闻投稿指南请查收!

近年来&#xff0c;大学生暑期“三下乡”社会实践工作方兴未艾&#xff0c;越来越多的大学生通过参与“三下乡”实践工作&#xff0c;走出校园&#xff0c;深入基层&#xff0c;体验农村生活&#xff0c;服务农民&#xff0c;促进农村经济社会发展&#xff0c;实现了理论与实践…

算能科技,致力于成为全球领先的通用算力供应商

算能致力于成为全球领先的定制算力提供商&#xff0c;专注于RISC-V、TPU处理器等算力产品的研发和推广应用。公司遵循全面开源开放的生态理念&#xff0c;携手行业伙伴推动RISC-V高性能通用计算产业落地&#xff1b;打造覆盖“云、边、端”的全场景产品矩阵&#xff0c;为数据中…