Hello,C(5)

本文介绍了文件在操作系统中的概念,包括从用户角度的特殊文件和普通文件分类,以及从数据组织形式上的ASCII文件和二进制文件。重点讲解了C语言中文件的打开与关闭、读写操作,如fopen、fclose、fputc、fgetc、fread、fwrite、fseek等功能函数的使用方法和模式参数。同时提到了fprintf和fscanf在磁盘文件读写中的应用及其效率问题。
摘要由CSDN通过智能技术生成

文件

  1. 文件指存储在外部介质(如磁盘磁带)上数据的集合。操作系统(windows,Linux,Mac 均是)是以文件为单位对数据进行管理的

2. 从用户角度,文件分为特殊文件(标准输入输出文件或标准设备文件)、普通文件(磁盘文件)

3. 从操作系统角度,每一个与主机相连的输入输出设备(鼠标、键盘)都是一个文件

4. 从数据的组织形式来看,文件分为:

ASCII 文件(文本文件):每一个字节放一个 ASCII 代码

二进制文件:把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放

文件的打开与关闭

  1. 打开文件后我们得到 FILE*类型的文件指针,通过该文件指针对文件进行操作,FILE 是

一个结构体类型

struct _iobuf {
char *_ptr; //下一个要被读取的字符地址
int _cnt; // 剩余的字符,如果是输入缓冲区,那么就表示缓冲区中还有多少个字符未被读取
char *_base; // 缓冲区基地址
int _flag; // 读写状态标志位
int _file; // 文件描述符
int _charbuf;
int _bufsiz;//缓冲区大小
char *_tmpfname;
};

typedef struct _iobuf FILE;
FILE *fp;
  1. 文件的打开

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

mode(方式) 意义

"r" 打开一个用于读取的文本文件

"w" 创建一个用于写入的文本文件

"a" 附加到一个文本文件

"rb" 打开一个用于读取的二进制文件

"wb"创建一个用于写入的二进制文件

"ab" 附加到一个二进制文件

"r+" 打开一个用于读/写的文本文件

"w+"创建一个用于读/写的文本文件

"a+" 打开一个用于读/写的文本文件

"rb+"打开一个用于读/写的二进制文件

"wb+"创建一个用于读/写的二进制文件

"ab+"打开一个用于读/写的二进制文件

  1. 文件的关闭

int fclose( FILE *stream );

函数fclose()关闭给出的文件流, 释放已关联到流的所有缓冲区。fclose()执行成功时返回 0,否则返回 EOF

文件的读写

  1. fputc

int fputc( int ch, FILE *stream );

将字符(ch 的值)输出到 fp 所指向的文件中去,如果输出成功,则返回值就是输出的字符;如果输出失败,则返回一个 EOF

  1. fgetc

int fgetc( FILE *stream );

从指定的文件读入一个字符,该文件必须是以读或读写方式打开的,读取成功一个字符,赋给ch。如果遇到文件结束符,返回一个文件结束标志 EOF

  1. fread与fwrite

int fread( void *buffer, size_t size, size_t count, FILE *fp );
int fwrite( const void *buffer, size_t size, size_t count, FILE *fp );

buffer:是一个指针。

对 fread 来说,它是读入数据的存放地址。

对 fwrite 来说,是要输出数据的地址(均指起始地址)。

size: 要读写的字节数。

count: 要进行读写多少个 size 字节的数据项。

fp: 文件型指针。

fread 函数的返回值是读取的内容数量,fwrite 写成功后返回值是已写的对象的数量

  1. fseek

int fseek( FILE *stream, long offset, int origin );

改变文件的位置指针

origin:

文件开头 SEEK_SET 0

文件当前位置 SEEK_CUR 1

文件末尾 SEEK_END 2

offset:

以起始点为基点,向前移动的字节数,一般要求为 long 型。

fseek()成功时返回 0,失败时返回非零

  1. 如果以文本方式写入的内容,一定要以文本方式来读,以二进制方式写入的内容,一定要以二进制的方式来读,不能混用

  1. fgets

char *fgets( char *str, int num, FILE *stream );

函数 fgets()从给出的文件流中读取[num - 1]个字符并且把它们转储到 str(字符串)中. fgets()在到达行末时停止,fgets()成功时返回 str(字符串),失败时返回 NULL,读到文件结尾返回 NULL

  1. fputs

int fputs( const char *str, FILE *stream );

fputs()函数把 str(字符串)指向的字符写到给出的输出流. 成功时返回非负值, 失败时返回 EOF

  1. ftell

#include <stdio.h>
long ftell( FILE *stream );

ftell()函数返回 stream(流)当前的文件位置,如果发生错误返回-1

  1. fprintf

int fprintf( FILE *stream, const char *format, ... );

fprintf()函数根据指定的 format(格式)(格式)发送信息(参数)到由 stream(流)指定的文件。fprintf()只能和 printf()一样工作(可以发现 fprintf 除去第一个形参,其他的参数与 printf 一样),printf 是将不同类型的数据以字符串的形式输出到屏幕上,fprintf是将这些数据写入到对应的文件中,fprintf()的返回值是输出的字符数,发生错误时返回一个负值

  1. fscanf

int fscanf( FILE *stream, const char *format, ... );

scanf 是把屏幕上我们输入的字符串数据依次格式化到各个变量中,函数 fscanf()以scanf()的执行方式从给出的文件流中读取数据。fscanf()的返回值是事实上已赋值的变量的数目,与 scanf 等价,如果未进行任何分配时返回 EOF

  1. 用 fprintf 和 fscanf 函数对磁盘文件读写,使用方便,容易理解,但由于在读取时要将 ASCII 码转换为二进制形式,在写入文件时又要将二进制形式转换成字符,花费时间比较多。因此,在内存与磁盘频繁交换数据的情况下,最好不用 fprintf 和 fscanf 函数,而用fread 和 fwrite 函数

完结

C语言的回顾到这里就先告一段落,未来计划每隔一段时间就像这样总结一下,做到温故而知新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值