IO操作之标准IO

r语言svr模型_R语言初探强化学习中的马尔可夫模型 强化学习大家这几年应该不陌生,从AlphaGo到AlphaZero让大家见识到了强化学习的力量。我们今天给大家介绍一个在强化学习中核心思维马尔可夫决策过程(MDP)。马尔科夫决策过程是基于马尔科夫论的随机动态系统的最优决策过程。它是马尔科夫过程与确定性的动态规划相结合的产物,故又称马尔科夫型随机动态规划,属于运筹学中数学规划的一个分支。今天我们给大家介绍下马尔可夫决策过程中用到一些算法以... 阅读详情

前言

在前面的文章中,我们已经对文件IO进行了简单的介绍。今天,我们便对另外一种IO操作相关的函数—标准IO进行初步的学习。

fopen函数

作用

与文件IO中的open函数的作用一致,fopen函数的作用也是打开一个文件。只是在形式上有所不同。

函数形式

函数原型FILE *fopen(const char *path, const char *mode)
头文件#include <stdio.h>
参数含义如下
返回值成功:返回一个文件流指针 失败:返回NULL值

其中,参数path指的是需要打开文件的路径和文件的文件名,而参数mode则指的是以什么方式打开该文件,可选的值为:

"r":以只读的方式打开文件
"r+":以读写的方式打开文件
"w":以覆盖的方式打开文件或者创建一个文件指针指向文件开头的可写的新文件
"w+":以覆盖的读写方式打开文件或者创建一个文件指针指向文件开头的新文件
"a":以追加的方式打开文件(不会覆盖文件之前的内容)或者创建一个文件指针指向文件末尾的新文件
"a+":以追加的方式打开文件或者创建一个新的文件,当读取文件的内容时,文件指针将指向文件开头,但是写入内容时,文件指针将指向文件的结尾

文件的权限问题

与open函数不同,fopen函数在创建一个新文件时,并没有提供指定文件权限的参数。所以,利用fopen函数创建的新文件的权限是默认的,为0666与取反后的文件掩码相与的结果。比如:当文件掩码为0222时,那么利用fopen函数创建的文件权限为:0666&(~0222) = 0444
当然,如果后续需要更改文件的权限,我们可以利用chmod等命令进行相应的更改。

测例

利用fopen函数,以追加的方式新建一个文件:

#include <stdio.h>
int main(int argc,char* argv[])
{
  	FILE* pd;
  	pd = fopen(argv[1],"a+");
 	if(NULL == pd)
  	{
     printf("open file %s failed!\n",argv[1]);
  	}
   fclose(pd);
   return 0;
}

fclose函数

作用

fclose函数的作用与文件IO中的close函数的作用是一致的,作用都是关闭打开的文件,只是两者的形式不同。

函数原型

函数原型int fclose(FILE *fp)
头文件#include <stdio.h>
参数含义如下
返回值成功:返回0 失败:返回-1

其中,参数fp即利用fopen函数返回的文件流指针。
与文件IO操作类似,当利用fopen函数打开一个文件之后,一定要在相应的位置利用fclose函数关闭该文件。

fseek函数和rewind函数

作用

与文件IO函数类似,标准IO也存在文件指针的概念。所以,在实际应用中,当用户想要指定操作的文件指针的位置时,便需要使用fseek函数或者rewind函数,对文件指针的位置进行更改。

rewind函数原型

rewind函数的作用是将文件指针的位置调整到文件的开头处,其函数原型如下:

函数原型void rewind(FILE *stream)
头文件#include <stdio.h>
参数如下
返回值无返回值

其中,参数stream即利用fopen函数打开文件时返回的文件流指针。

fseek函数原型

对于标准IO操作而言,不仅可以使用rewind函数将文件指针的位置调整到文件的开头,同样也可以使用fseek函数,调整文件指针的位置到其他地方。该函数的原型如下:

函数原型int fseek(FILE *stream, long offset, int whence)
头文件<stdio.h>
参数如下
返回值成功:返回文件指针的位置 失败:返回-1

其中,参数stream即上述的文件流指针,参数whence即以什么地址为基准进行文件指针的调整,可选的参数为:

SEEK_SET:文件开头
SEEK_CUR://当前位置
SEEK_END://文件结尾

参数offset指的便是文件指针的偏移值,正数意味着向右进行偏移,负数则意味着向左进行偏移。
比如:

rewind(pd);//将文件指针调整到文件开头
fseek(pd,-2,SEEK_END);//将文件指针的位置调整到文件的倒数第二个位置处
fseek(pd,0,SEEK_SET);//将文件指针的位置调整到文件的开头处

有上述可知,rewind(pd)函数与fseek(pd,0,SEEK_SET)函数是等价的。

ftell函数

ftell函数的作用是获取文件当前文件指针的位置。
函数原型如下:

函数原型long ftell(FILE *stream)
头文件<stdio.h>
参数如下
返回值成功:返回文件指针的位置 失败:返回-1

其中,参数stream同样指的是文件流指针。

fflush函数

无论是行缓存函数还是全缓存函数,当使用fflush刷新缓存时,均会强制将缓存中的内容写到内核的缓存中。

标准IO中的读写函数

在标准IO操作中,读写函数比较多,我们首先按照之前提到的缓存特性,对标准IO中的读写函数进行分类。
按照缓存的特性,我们可以将标准IO中的读写函数分为:

1、行缓存读写函数:
读函数:
fgets gets printf fprintf sprintf
写函数:
fputs puts scanf
2、全缓存读写函数:
读函数:
fread
写函数:
fwrite
3、无缓存读写函数:
stderr

由于标准IO函数中的读写函数较多,所以此处就不进行一一讲解了,而对在使用过程中需要注意的地方进行简单的总结:

1、fprintf、printf和sprintf函数之间的区别?
①fprintf函数可以将内容输出到一个文件或者标准输出上(一般为屏幕)
②printf函数只能将内容输出到标准输出上
③sprintf函数是将内容复制给一个字符串	

feof函数和ferror函数

在利用上述的读函数读取文件中的内容时,当读取到文件结尾或者读取文件失败时,读函数均会返回EOF。那么,在实际应用中,怎样判断到底是已经读取到了文件结尾,还是读取文件时发生了错误呢?我们可以利用feof函数或者ferror函数进行判断。feof函数的原型如下:

函数原型int feof(FILE *stream)
头文件<stdio.h>
参数如下
返回值返回非零值:已经到了文件结尾 返回零值:并没有到达文件结尾

其中,参数stream仍然是上述的文件流指针。
ferror函数的原型如下:

函数原型int ferror(FILE *stream)
头文件<stdio.h>
参数如下
返回值返回非零值:读写文件失败 返回零值:成功读写文件

其中,参数stream仍然是文件流指针。

综合测例

利用上面的标准IO函数或者相应的库函数,实现cat命令:
cat命令的作用是显示一个文件中的内容:

 #include <stdio.h>
 #include <string.h>
 int main(int argc,char* argv[])
 {
     FILE* pd;
    char* write_buf = "Hello Linux";
    char read_buf[128] = {0};
    ssize_t write_num = 0,read_num = 0;
    pd = fopen(argv[1],"r");
    if(NULL == pd)
    {
         printf("open file %s failed!\n",argv[1]);
         return -1;
    }
    //write_num = fwrite(write_buf,sizeof(write_buf[0]),strlen(write_buf),pd);
    rewind(pd);
     while(1)
    {
      read_num = fread(read_buf,sizeof(read_buf[0]),128,pd);
       printf("%s",read_buf);
       if(read_num < 128)
       {
           break;
       }
     }
     printf("\n");
     fclose(pd);
}
BeikeShop跨境电商独立站系统V1.5.0免授权全开源版 BeikeShop 一款开源好用的跨境电商系统,BeikeShop 是基于 Laravel 开发的一款开源商城系统,主要面向外贸/跨境电商行业提供商品管理、订单管理、会员管理、支付、物流、系统管理等功能。BeikeShop商城 Beike多语言商城 多货币商城B2C商城系统 代码100%开源 PHP商城系统 H5/PC商城 跨境电商系统 跨境商城系统 电商商城系统 Laravel 9 框架插件化开发,MVC架构 支持插件市场。Event 机制实现Hook功能,自定义可视化装修。 阅读详情

相关推荐

遗传算法优化光学超表面:智能设计突破纳米结构瓶颈

光学超表面设计本质上是一个高维、非线性、离散每个结构单元(如纳米砖柱、孔洞、十字架)有多个参数(长、宽、高、旋转角、材料),整个阵列的参数组合数量随单元数指数级增长。性能指标(如聚焦效率、工作带宽、偏振转换率、特定角度响应)往往无法用简单解析式表达,需依赖计算密集型电磁仿真(如FDTD, FDFD, RCWA)来评估。结构参数微小变化可能引起光学响应的剧烈跃变,目标函数存在多个局部最优解。实际制造通常要求结构参数取自有限的离散值(如特定刻蚀深度、材料库)。

weixin_51101456的博客 1141

I/O(标准输入/输出)

通过 printf 方法可以输出指定格式数据:其中 表示整型数字, 表示浮点型数字, 表示百分号。读取标准输入设备数据(键盘),每次输入将以换行符结束。数据类型为 InputStream。向标准输出设备输出数据(控制台)。数据类型为 PrintStream。%d%f%%在百分号后加入特殊符号,可以指定数据的显示类型。为正数或者负数添加符号。

m0_73876302的博客 198

【运筹学】什么是基变量?对于线性规划问题中“基”概念的理解(3月3日学习笔记)

在学习《线性规划与目标规划》的过程中,课程的主讲老师郭韧给出了对于基概念的定义如下图 图片来源:运筹学(中国大学mooc网) 由此我产生了几个疑惑:1.如何理解B是线性规划问题的一个基?2.为什么说最多有CnmC_n^mCnm​个基呢?     1.如何理解B是线性规划问题的一个基?1.如何理解B是线性规划问题的一个基?1.如何理解B是线性规划问题的一个基? 在回答第一个...

纸羊同学的博客 3万+

【操作系统】磁盘IO常见性能指标和分析工具实战

磁盘IO常见性能指标和分析工具实战

互联网小阿祥 8027

python画弗里德曼(Friedman) 检验和秩和检验(Nemenyi)检验图

python画弗里德曼(Friedman) 检验和秩和检验(Nemenyi)检验图 画好后效果图 实现代码如下 import matplotlib.pyplot as plt #算法平均排名 _alg_=[1.405,2.643,2.786,2.167] y=[1,2,3,4]#alg1,alg2,alg3,alg4 通过Nemenyi测试计算得到的临界值CD CD=1.024 h_CD=CD/2 plt.figure(figsize=(10,6)) plt.scatter(_alg_,y,s=10

大模型天花板 4464

中兴畅行60 ZTE 7552N 深度改造指南:从解锁BL到Magisk Root与IMEI硬改全流程

本文详细介绍了中兴畅行60(ZTE 7552N)的深度改造全流程,包括解锁BL、刷入Magisk获取Root权限以及IMEI硬改等关键步骤。通过专业的操作指南和实用技巧,帮助用户安全完成设备改造,同时提醒注意法律风险和技术难点。

weixin_33670786的博客 1884

了解 IOPS、延迟和存储性能

当大多数人考虑存储性能时,他们会考虑吞吐量(每秒的传输数据量)。但吞吐量与汽车的最高速度相似。事实上,你几乎永远也达不到汽车的最高速度。因为在大多数情况下,相关性并不是很强。 例如,像汽车加速的速度以及汽车处理弯道和弯道的程度等属性通常比其最高速度更重要。此示例还适用于存储性能。 大多数人都知道,SSD 通常比普通的机械硬盘驱动器(HDD)快得多。但与这些设备的吞吐量无关。它的所有关于输入/输出操作每秒(IOPS)。如果你能处理大量的IOPS,这才是应用程序在一般条件下评测的性能。但IOPS并没有告诉你整个

kaili的博客 2528

2026年寒武纪数字IC笔试试卷带答案

本文摘要: 该数字IC设计测试卷包含单选题(30分)、波形分析题(15分)、多选题(30分)三类客观题,覆盖时序约束、半导体工艺、状态机、数制转换、同步复位等核心知识点。重点考察:1)跨时钟域处理(如异步FIFO、格雷码应用);2)时序分析(建立/保持时间、时钟约束指令);3)低功耗设计技术(时钟门控、DVFS);4)寒武纪MLU架构特性(张量核、混合精度计算)。解析强调工程实践要点,如异步复位需同步释放、建立时间违例与频率的关联性等。试题难度梯度明显,既包含基础概念辨析(如Moore/Mealy状态机),

Open 223

IO之标准IO

IO之标准IO

qq_57018268的博客 661

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

zhengzaifeidelushang的博客 3290

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件概述(ArkSIM集成开发环境 (IDE))

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件详述(ArkSIM集成开发环境 (IDE))

917

磁盘性能指标--IOPS、吞吐量

磁盘性能指标–IOPS、吞吐量(转)一、概念介绍:磁盘性能指标–IOPS IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。 随机读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件

白非马的博客 9万+

点云结构面智能识别与裂隙网络分析系统

点云结构面智能识别系统摘要 本系统采用深度学习与传统几何算法融合的方法,实现岩石结构面的智能识别与分析。系统包含7个核心模块:点云预处理、结构面识别、分组分割、参数计算、粗糙度分析、裂隙网络生成和可视化。技术路线结合PointNet++深度学习架构与RANSAC、区域生长等传统算法,通过预处理→深度学习识别→几何精修→参数计算→网络构建的流程实现高精度分析。预处理模块实现点云降噪、下采样和法向量估计,深度学习模块基于改进的PointNet++架构进行特征提取和分类。系统支持多种点云格式输入,提供完整的结构面

huanghm88的专栏 344

标准IO操作

参数:ptr:存储读到数据的首地址;参数:ptr:要写入的数据的首地址;参数:s:用来存放读取到的数据的内存空间的首地址;参数:stream:需要定位的文件流指针;“r+”,以读写的方式打开,文件需存在;返回值:成功:读到的字符对应的ASCII码值;“w+”如果文件存在则清空,以读写的方式打开,反之创建打开;“w”如果文件存在则清空,反之以只写的方式创建文件并打开;返回值:成功:存储空间的首地址;“a”以追加写的方式打开,文件不存在则创建,存在则续写;“a+”以读写的方式打开,文件不存在创建,存在则续写。

weixin_45428992的博客 1125

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

一、标准io操作

io操作是所有一切实现的基础,input and outputfopen() 函数将文件打开,通过这个函数我们可以告诉操作系统我们要操作的是哪个文件,以及用什么样的方式操作这个文件。

qq_43420088的博客 1082

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IO操作(标准IO和文件IO)

使用 fprintf 和 fscanf 完成注册和登录功能,要求做个小菜单,三个功能,功能1是注册,用户输入账号和密码后,将其存放到外部文件中;功能2是登录,用户输入登录账号和密码后,如果跟文件中匹配,则提示登陆成功,如果全部不匹配,则提示登录失败;​ 当内核提供的函数出错后,内核空间会向用户空间反馈一个错误信息,由于错误信息比较多也比较复杂,系统就给每种不同的错误信息起了一个编号,用一个整数表示,这个整数就是错误码。当输出数据中包含换行符时,缓冲区会立即刷新,将数据写入目标设备(如终端或文件)。

Ye1l0vv的博客 1117

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【IO操作】标准IO和文件IO

主要介绍了标准 I/O 和文件 I/O 的区别,以及关于这两种 I/O 操作的详细介绍。标准 I/O 是基于 C 语言的库函数,而文件 I/O 是基于 Linux 系统调用的操作。文章分析了它们的区别,包括在跨平台性、系统调用频率以及文件描述符和文件指针等方面的不同。此外,文章总结了标准 I/O 和文件 I/O 中常用的函数、参数、返回值和常见用法,并提供了示例代码以便加深理解。

Atcxr的博客 2247

io操作之标准io

学习io操作中整理的函数各项参数和作用以及返回值,以及缓存区刷新规律和错误码诞生原因和显示方式。

weixin_45849671的博客 485

文件IO与标准IO操作函数

1.定义 标准IO:标准I/O是ANSI C建立的一个标准I/O模型,是一个标 准函数包和stdio.h头中的定义,具有一定的可移植性。标准IO库处理很多细节。例如缓存分配,以优化长度执行IO等。标准的IO提供了三种类型的缓存。 (1)全缓存:当填满标准IO缓存后才进行实际的IO操作。 (2)行缓存:当输入或输出中遇到新行符时,标准IO库执行IO操作。 (3)不带缓存:只要用户调用该函数,就会写到...

XBlog 1478

文件操作:文件IO操作流程及各类函数应用+标准IO与文件IO区别

文件IO是Linux内核专门为应用层提供的文件操作方法。 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);功能:打开文件并获得一个文件描述符参数 遵循 Linux 文件权限规则(如 对应八进制 , 对应 ),用于创建新文件时设定初始权限 。 3.返回值 成功:返回文件描述

2402_85476687的博客 2028

文件操作之标准IO与系统IO

文件操作之标准IO与系统IO 文件操作既可以用系统IO实现,也可以用标准IO实现,那二者又有和联系和区别呢? 联系 标准IO的实质是调用系统IO完成文件操作,即标准IO的执行依附于系统IO。 区别 系统IO是低级IO,通过API直接与操作系统内核进行操作,标准IO属于C库,在用户空间的可移植性强。 标准IO在打开文件时候就会建立起缓冲区,缓冲区有三种模式。而系统IO没有,需要手动创建。 数据流向 无缓存IO操作数据流向路径:数据–内核缓存区–磁盘 标准IO操作数据流向路径:数据–流缓存

TJW729024716博客 359

标准 IO 不用愁:核心知识 + 操作指南,入门即会!

标准IO是C标准库提供的封装接口,主要解决系统IO的可移植性和效率问题。它通过缓冲机制减少系统调用开销,并支持跨平台使用。程序启动时自动创建三个标准流:stdin(输入)、stdout(行缓冲输出)、stderr(无缓冲错误输出)。文件操作核心函数包括fopen(返回文件指针)和fclose(释放资源)。标准IO提供多种读写方式:按字节(fgetc/fputc)、按行(fgets/fputs)、格式化(fprintf/fscanf)以及块读写(fread/fwrite)。特别要注意不同函数的特性和安全性差异

2402_82459348的博客 1369

文件操作---文件IO与标准IO

文件操作---文件IO与标准IO

weixin_56459724的博客 1099

linux 文件io和标准io的一些实现细节,linux学习之IO操作,read,标准IO总结

首先 read,当读一个文件的时候,read返回的是实际读取的字节数,当读取文件结束后,下次read返回0,当read一个socket时,返回也是实际读取的字节数,当socket上没有数据时,如此时是阻塞的,则一直阻塞在这,若不是阻塞的则返回-1,当socket断开时,返回0;所以0标示,连接结束linux学习之IO操作,标准IO总结IO文件操作时最常用的也最基本的内容。linux文件系统是由两层...

weixin_39718890的博客 217
上一篇: IO操作之文件IO
下一篇: Linux系统中的文件概念
「已注销」
博客等级 码龄7年 49粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值