Day4. 文件IO的基本概念和读写

温习:

文件的拷贝(单个字符)(fgetc/fputc)

#include <stdio.h>int main(void)
{FILE* fp = NULL;FILE* fq = NULL;char ch  = 0;fp = fopen("str.txt","r");if (fp == NULL){perror("file to fopen!");return -1;}fq = fopen("add.txt","w");if (fq == NULL){perror("file to fopen!");return -1;}while(1){ch = fgetc(fp);if (EOF == ch){break;}fputc(ch,fq);}fclose(fp);fclose(fq);return 0;
}

文件的拷贝(字符串)(fgets/fputs)

#include <stdio.h>int main(void)
{FILE* fstr = NULL;FILE* fadd = NULL;char teydefe[4096] = {0};char* ret = NULL;fstr = fopen("str.txt","r");if (fstr == NULL){perror("fils to fopen!");return -1;}fadd = fopen("add.txt","w");if (fadd == NULL){perror("fils to fopen!");return -1;}while(1){ret = fgets(teydefe,sizeof(teydefe),fstr);if (ret == NULL){break;}fputs(teydefe,fadd);}fclose(fstr);fclose(fadd);return 0;
}

文件IO

一、标准IO和文件IO的区别

1.标准IO是库函数,是对系统调用的封装

2.文件IO是系统调用,是linux内核中函数的接口

3.标准IO是有缓存的

4.文件IO是没有缓存的

二、文件IO

1.操作步骤:

  打开->读/写->关闭

2.打开文件:

  open

  int open(const char *pathname,int flags);

  int open(const char *pathname,int flags,mode_t mode);

功能:

  打开文件并且获得文件描述符

参数:

  pathname:要打开的文件名

  flags:标志位

返回值:

  成功返回文件描述符(很小的非负整数)

  失败返回-1

  新生成的文件描述符总是为尚未被使用的最小非负整数

3.关闭文件:

close

  int close(int fd)

功能:

  将fd对应的文件描述符关闭

三、文件IO的打开方式和标准IO的对应关系

“r”          O_RDONLY

“r+”        O_RDWR

“w”         O_WRONLY | O_CREAT | O_TRUNC, 0664

“w+”       O_RDWR | O_CREAT | O_TRUNC, 0664

“a”         O_RDONLY | O_CREAT | O_APPEND,0664

“a+”       O_RDWR | O_CREAT | O_APPEND,0664

四、文件描述符概念

英文:缩写fd(file descripotor)

是0-1023的数字,表示文件

0、1、2的含义

0:stdin  标准输入

1:stdout  标准输出

2:stderr  错误

五、读写read/write:

1.write

  ssize_t write(int fd, const void *buf, size_t count);

功能:

  向fd对应的文件中写入buf指向的count个字节

参数:

  fd:文件描述符

  buf:写入数据空间首地址

  count:写入的字节数

返回值:

  成功返回实际写入字节数

  失败返回-1 

练习:

将指定文件中写入buf指向的count个字节

#include<stdio.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>int main(void)
{int fd = 0;char tmpbuff[4069] = {"how are you!"};fd = open("a.txt",O_WRONLY | O_CREAT | O_TRUNC, 0664);if (fd == -1){perror("fail to open!");return -1;}write(fd,tmpbuff,strlen(tmpbuff));close(fd);return 0;
}

易错点:

求字符串长度用sizeof,对二进制数据使用strlen;printf的字符最后没有‘\0’

2.read 

  ssize_t read(int fd, void *buf, size_t count);

功能:

  从文件描述符fd对应的文件中读取count个字节存放到buf开始的空间中

参数:

  fd:文件描述符 

  buf:存放数据空间的首地址

  count:想要读取数据字节数

返回值:   

  成功返回实际读到的字节数

  失败返回-1 

  读到文件末尾返回0 

练习:
#include<stdio.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>int main(void)
{int fd = 0;ssize_t count = 0;char tmpbuff[4069] = {0};fd = open("a.txt",O_RDWR);if (fd == -1){perror("fail to open!");return -1;}count = read(fd,tmpbuff,sizeof(tmpbuff));printf("count=%ld\n",count);printf("tmpbuff=%s",tmpbuff);close(fd);return 0;
}

注意:源文件中会自带一个'\n',所以打印不同加'\n'

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

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

相关文章

网络模型及传输基本流程

1.OSI 七层模型 OSI &#xff08; Open System Interconnection &#xff0c;开放系统互连&#xff09;七层网络模型称为开放式系统互联参考模型&#xff0c;是一个逻辑上的定义和规范; 把网络从逻辑上分为了 7 层 . 每一层都有相关、相对应的物理设备&#xff0c;比如路由器…

RCS系统之:冲突解决

在RCS系统中&#xff0c;避免碰撞是至关重要的。以下是一些常见的方法和技术用于避免碰撞&#xff1a; 障碍物检测&#xff1a;机器人可以配备各种传感器&#xff0c;如激光雷达、超声波传感器、摄像头等&#xff0c;用于检测周围的障碍物和环境。通过实时监测周围情况&#xf…

插值与拟合算法介绍

在数据处理和科学计算领域,插值与拟合是两种极为重要的数据分析方法。它们被广泛应用于信号处理、图像处理、机器学习、金融分析等多个领域,对于理解和预测数据趋势具有至关重要的作用。本文将深入浅出地介绍这两种算法的基本原理,并结合C语言编程环境探讨如何在CSDN开发者社…

力扣:139. 单词拆分

动态规划&#xff1a; 1.先声明dp数组的含义为下标i表示的是在s变量中i前面的字符串是否在wordDict变量中存在&#xff0c;初始化dp【0】来进行后面dp数组的递推。同时要判断截取的值是否在wirdDict中是否存在&#xff0c;还要判断dp【j】的下标的j前面的字符串是否也在wirdDi…

数组常见算法代码总结

一、数组排序【冒泡排序】&#xff08;优化&#xff09; 1.基本实现思路: 数组排序是通过冒泡排序算法实现的&#xff0c;基本实现思路是比较相邻的元素&#xff0c;把小的元素往前移动或把大的元素往后移动&#xff0c;相邻元素两两进行比较&#xff0c;若大元素在小元素前面…

RocketMQ订阅关系不一致和不能消费时如何排查?

订阅关系不一致 调整任意一个实例的订阅关系和另一个保持一致 消费者不能消费消息 它是最常见的问题之一&#xff0c;也是每个消息队列服务都会遇到的问题 1.确认哪个消息未消费。在这时消费者至少需要手机消息id、消息key、消息发送时间段三者之一 2.确认消息是否发送成功…

HashMap使用静态初始化块添加元素

使用静态初始化块&#xff08;Static Initialization Block&#xff09; 示例代码&#xff1a; import java.util.HashMap; import java.util.Map;public class Main {public static void main(String[] args) {// 使用静态初始化块批量添加元素Map<String, Integer> h…

JVM--- 垃圾收集器详细整理

目录 一、垃圾收集需要考虑的三个事情&#xff1a; 二、垃圾回收针对的区域 三、如何判断对象已死 1.引用计数算法&#xff1a; 2.可达性分析算法 四、引用 五、生存还是死亡&#xff1f; 六、回收方法区 七、垃圾收集算法 1.分代收集理论 2.标记-清除算法 3.标记-复制算…

huggingface库LocalTokenNotFoundError:需要提供token

今天刚开始学习huggingface&#xff0c;跑示例的时候出了不少错&#xff0c;在此记录一下&#xff1a; (gpu) F:\transformer\transformers\examples\pytorch\image-classification>.\run.bat Traceback (most recent call last):File "F:\transformer\transformers\e…

一站式安装对应显卡版本的cuda和torch(windows)

前言 一年前&#xff0c;安装过cuda&#xff0c;觉得并不难&#xff0c;就没有记录。 这次安装还算顺利&#xff0c;就是在找资料的时候&#xff0c;浪费了不少时间 这次就记录下来&#xff0c;方便以后再次安装 总结安装程序&#xff1a; 1、安装python环境 2、安装VS的C环境&…

【机构vip教程】Unittest(1):unittest单元测试框架简介

unittest单元测试框架简介 unittest是python内置的单元测试框架&#xff0c;具备编写用例、组 织用例、执行用例、功能&#xff0c;可以结合selenium进行UI自动化测 试&#xff0c;也可以结合appium、requests等模块做其它自动化测试 官方文档&#xff1a;https://docs.pytho…

机试指南:3-4章

文章目录 第3章 排序与查找(一) 排序1.sort函数&#xff1a;sort(first,last,comp)2.自定义比较规则3.C函数重载&#xff1a;同一个函数名&#xff0c;有不同的参数列表4.机试考试最重要的事情&#xff1a;能把你曾经做过的题目&#xff0c;满分地做出来5.例题例题1&#xff1a…

xtu oj 1162 奇偶校验

题目描述 奇偶校验是一种在通讯中经常使用的&#xff0c;用来确认传输的字节是否正确的手段。 对于一个BYTE(8BIT),我们使用0~6bit来存储数据&#xff0c;称为数据位&#xff0c;第7位存储奇偶校验位。 如果数据位有偶数个1&#xff0c;那么第7位为0&#xff0c;否则为1。现给…

markdown绘制流程图相关代码片段记录

有时候会使用typora来绘制一些流程图&#xff0c;进行编码之类的工作&#xff0c;在网络搜集了一些笔记&#xff0c;做个记录&#xff0c;方便日后进行复习&#xff0c;相关的记录如下&#xff1a; 每次作图时&#xff0c;代码以「graph <布局方向>」开头&#xff0c;如…

kettle--JavaScript脚本日期使用

输入日期为20240216&#xff0c;运行如下代码&#xff0c;结果为true var reportdate parent_job.getVariable("v_reportdate"); var date_type parent_job.getVariable("v_date_type"); var reportdate_freportdate.substr(0,4) "/" report…

P3141 [USACO16FEB] Fenced In P题解

题目 如果此题数据要小一点&#xff0c;那么我们可以用克鲁斯卡尔算法通过&#xff0c;但是这个数据太大了&#xff0c;空间会爆炸&#xff0c;时间也会爆炸。 我们发现&#xff0c;如果用 MST 做&#xff0c;那么很多边的边权都一样&#xff0c;我们可以整行整列地删除。 我…

RK3399平台开发系列讲解(USB篇)U盘等存储类设备

🚀返回专栏总目录 文章目录 一、什么是U盘等存储类设备二、U盘设备传输数据结构三、U盘识别需要打开的宏沉淀、分享、成长,让自己和他人都能有所收获!😄 📢介绍U盘等存储类设备。 一、什么是U盘等存储类设备 USB Mass Storage Device Class(USB MSC/UMS) USB大容量存…

springboot199疫情打卡健康评测系统

疫情打卡健康评测系统设计与实现 摘 要 当下&#xff0c;如果还依然使用纸质文档来记录并且管理相关信息&#xff0c;可能会出现很多问题&#xff0c;比如原始文件的丢失&#xff0c;因为采用纸质文档&#xff0c;很容易受潮或者怕火&#xff0c;不容易备份&#xff0c;需要花…

[AIGC] 了解消息队列事务:保证数据一致性的关键

在分布式系统中&#xff0c;消息队列是一种常见的解耦手段&#xff0c;可以帮助我们简化复杂系统的架构设计&#xff0c;提高系统的可靠性和可扩展性。但是&#xff0c;在使用消息队列时&#xff0c;我们需要注意一个重要的问题&#xff1a;保证数据的一致性。在这篇文章中&…

《剑指 Offer》专项突破 - 面试题 43 : 在完全二叉树中添加节点(两种方法 + C++ 实现)

目录 前言 方法一 方法二 前言 题目链接&#xff1a;LCR 043. 完全二叉树插入器 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 在完全二叉树中&#xff0c;除最后一层之外其他层的节点都是满的&#xff08;第 n 层有 个节点&#xff09;。最后一层的节点可能…