当前位置:首页 > 工业控制 > 电子设计自动化
[导读]作者:王姗姗,华清远见嵌入式学院讲师。 在标准IO中,对于文件的读写无非三种方式: (1) 每次一个字符的I / O。 (2) 每次一行的I / O。 (3) 直接I / O。 似乎这些函数看起来很简单,但只有理解了这些函数,你才知道该

作者:王姗姗,华清远见嵌入式学院讲师。

在标准IO中,对于文件的读写无非三种方式:

(1) 每次一个字符的I / O。

(2) 每次一行的I / O。

(3) 直接I / O。

似乎这些函数看起来很简单,但只有理解了这些函数,你才知道该如何使用,例如怎样来判断读取的文件是否结束,怎样来统计文件的行数,等等。

下面先来回顾下读取文件的三种方式,然后再举例看下怎样使用。

一次读或写一个字符,使用getc、fgetc或getchar。如果流是带缓存的,则标准I / O函数处理所有缓存。三个函数原型如下:

#include <stdio.h>

int getc(FILE *fp) ;

int fgetc(FILE *fp) ;

int getchar(void);

三个函数的返回:若成功则为下一个字符,若已处文件尾端或出错则为E O F。强调的是不管是出错还是到达文件尾端,这三个函数都返回同样的值。为了区分这两种不同的情况,必须调用ferror()或feof()。

一次读或写一行,使用f g e t s和gets。两个函数原型如下:

#include <stdio.h>

Char *gets(char *s) ;

Char *fgets(char *s,int size,FILE *steam)

两个函数返回:若成功则为buf,若已处文件尾端或出错则为null。这两个函数都指定了缓存地址,读入的行将送入其中。gets()从标准输入读,而fgets()则从指定的流读。

对于fgets(),必须指定缓存的长度为n。此函数一直读到下一个新行符为止,但是不超过n-1个字符,读入的字符被送入缓存,该缓存以null字符结尾。如若该行,包括最后一个新行符的字符数超过n-1,则只返回一个不完整的行,而且缓存总是以null字符结尾。对fgets()的下一次调用会继续读该行。

直接I / O使用的是fread。每次I / O操作读某种数量的对象,而每个对象具有指定的长度。这个函数常用于从二进制文件中读一个结构。原型如下:

int fread(void * ptr,int objsize,int objnum,FILE *fp);

这个函数返回:读的对象数。fputs()在遇到null字节时就停止,而在结构中可能含有null字节,所以不能使用每次一行函数实现这种要求,而fread能使我们一次读整个结构。

下面看下如何利用上面提到的标准IO读函数来判断你读取的文件是否结束以及如何来统计文件的行数。

1、判断文件结束有三种方式:

a) 当用fgetc(src)返回的int值为EOF时,读到文件的末尾

b) 当用fgets(p,1024,src)返回的指针为NULL时,读到文件的末尾

c) 当用fread(s,1,20,src)返回的个数小于20时,读到文件的末尾

实现起来简单明了,就不再细说。

2、统计文件的行数

a) 当用fgetc(src)返回的int值为’n’时行数加一

b) 当用fgets(p,1024,src)返回的指针不为NULL时,你的缓冲即提供的p[1024]已经读到字符,这个时候实际上有两种情况,一种你读进来的字符长度小于1024个,这个时候一行结束,行数加一,另一种比较复杂,由于受自己定义的缓冲的限制,一次只能读进来1023个,如果恰好这个时候你刚好读完一行,那p[]1022]里存放的一定’n’,如果不是,那你的一行还一定没有结束了。

程序如下:

Int n;

A) While(fgetc(src)==’n’)

N++;

B) while(fgets(p,1024,src)!=NULL)

{

If(strlen(p)<1024||p[1022]==’n’)

N++;

}
“本文由华清远见http://www.embedu.org/index.htm提供”



来源:华清远见0次

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

为了提升设计效率和运行安全性 ,对DL/T 834—2023《火力发电厂汽轮机防进水和冷蒸汽导则》与DL/T 834—2003 《火力发电厂汽轮机防进水和冷蒸汽导则》的设计、运行和检验及维护要求进行了对比分析 , 总...

关键字: 标准 疏水 冷蒸汽 发电厂

电磁兼容(EMC)是指在同一电磁环境中,不同设备或系统能够正常工作且互不干扰的状态。在现代电子和通信领域,EMC是一个至关重要的概念,它不仅影响设备的性能,还关系到整个系统的稳定性和安全性。为了确保设备的EMC,各国都制...

关键字: 电磁兼容 EMC 标准

北京——2024年10月29日 亚马逊云科技日前宣布,通过与光环新网与西云数据的紧密合作,在亚马逊云科技(北京)区域和(宁夏)区域推出Amazon Lambda SnapStart功能,将基于Java Lambda函数的...

关键字: 函数 数据处理

北京2024年10月29日 /美通社/ -- 亚马逊云科技日前宣布,通过与光环新网与西云数据的紧密合作,在亚马逊云科技(北京)区域和(宁夏)区域推出Amazon Lambda SnapStart功能,将基于Java La...

关键字: START 亚马逊 PS 函数

无线充电技术,作为现代科技领域的一项创新,正逐步改变着我们的生活方式。从智能手机到电动汽车,无线充电的应用场景日益广泛,为用户提供了前所未有的便捷性。然而,尽管无线充电技术发展迅速,其在标准和能效方面仍面临诸多瓶颈,这些...

关键字: 无线充电 能效 标准

关于数据分析与可视化,以下介绍Pandas读取数据以及保存数据的方法,毕竟我们很多时候需要读取各种形式的数据,以及将我们需要将所做的统计分析保存成特定的格式。

关键字: 函数 Panda

深圳2024年8月15日 /美通社/ -- 近日,知名量化交易平台水母量化正式推出了突破性的轮动交易策略回测功能,目前已进入公测阶段。该功能实现了从策略设计、历史回测到实盘自动交易一体化流程,帮用户解决了策略验证难、交易...

关键字: 编程 仿真 函数 开源

随着无人机的普及,越来越多的人开始使用无人机进行各种飞行任务,但是不当的使用会给公共安全和社会秩序带来潜在的风险,因此对于无人机使用的规定也变得越来越严格。本文将介绍无人机使用的标准和规定,以帮助大家正确使用无人机。

关键字: 无人机 标准 UAV

智能家居作为新兴领域,逐渐走入了人们的生活。智能家居系统是利用先进的计算机技术、网络通讯技术、智能云端控制、综合布线技术、医疗电子技术依照人体工程学原理,融合个性需求,将与家居生活有关的各个子系统如安防、灯光控制、窗帘控...

关键字: 智能家居 标准

Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。

关键字: python 函数 对象编程
关闭