目录
标准IO流
在C语言中,流(Stream)是用于描述一切输入源或输出目的地的概念。流可以是键盘输入、屏幕输出,也可以是磁盘文件。标准流包括三个预定义的流:
stdin
:标准输入流,默认为键盘。stdout
:标准输出流,默认为屏幕。stderr
:标准错误输出流,也是屏幕,但通常用于错误信息。
文本文件与二进制文件
C语言处理的文件主要有两种类型:文本文件和二进制文件。
- 文本文件:由字符序列组成,适合存储人类可读的文本信息。处理文本文件时,C语言提供了
fgetc
、fputc
、fgets
、fputs
、fscanf
和fprintf
等函数。 - 二进制文件:保存的是字节流,可能包含非打印字符,适合存储数据结构或二进制数据。对于二进制文件,通常使用
fread
和fwrite
进行读写。
打开文件
FILE *fopen(const char *filename, const char *mode)
- 功能:打开一个文件并返回一个
FILE
指针。 - 参数:
filename
:文件的路径。mode
:打开模式,如"r"
(读取)、"w"
(写入)、"a"
(追加)、"r+"
(读写)等。
读写文件
文本文件
对于文本文件,可以使用以下函数进行读写:
int fgetc(FILE* stream)
- 功能:从流中读取一个字符。
- 参数:
stream
:文件流。
- 返回值:成功时返回读取的字符(类型为
int
),失败或到达文件末尾时返回EOF
。
int fputc(int c, FILE* stream)
- 功能:写入一个字符至流。
- 参数:
c
:要写入的字符(被转换为unsigned char
)。stream
:文件流。
- 返回值:成功时返回写入的字符,失败时返回
EOF
。
char* fgets(char *s, int n, FILE *stream)
- 功能:读取一行文本至字符串。
- 参数:
s
:指向用于存储读取文本的缓冲区的指针。n
:缓冲区的大小。stream
:文件流。
- 返回值:成功时返回
s
,失败或到达文件末尾时返回NULL
。
int fputs(const char *s, FILE *stream)
- 功能:写入字符串至流中。
- 参数:
s
:要写入的字符串(不包括终止的空字符)。stream
:文件流。
- 返回值:成功时返回非负值,失败时返回
EOF
。
int fscanf(FILE *stream, const char *format, ...)
- 功能:根据格式化字符串读取数据。
- 参数:
stream
:文件流。format
:格式化字符串,类似于scanf()
。...
:可变参数,根据format
中的格式说明符提供具体的值。
- 返回值:成功时返回成功读取的数据项数量,失败时返回
EOF
。
int fprintf(FILE *stream, const char *format, ...)
- 功能:根据格式化字符串写入数据。
- 参数:
stream
:文件流。format
:格式化字符串,类似于printf()
。...
:可变参数,根据format
中的格式说明符提供具体的值。
- 返回值:成功时返回写入的字符总数,失败时返回负值
二进制文件
二进制文件使用fread
和fwrite
进行读写:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
- 功能:从流中读取数据至内存块。
- 参数:
ptr
:指向用于存储读取数据的内存块的指针。size
:每个数据项的大小(以字节为单位)。nmemb
:数据项的数量。stream
:文件流。
- 返回值:成功读取的数据项数量。如果读取失败或到达文件末尾,则返回的数量可能小于
nmemb
。
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
- 功能:从内存块写入数据至流。
- 参数:
ptr
:指向包含要写入数据的内存块的指针。size
:每个数据项的大小(以字节为单位)。nmemb
:数据项的数量。stream
:文件流。
- 返回值:成功写入的数据项数量。如果写入失败,则返回的数量可能小于
nmemb
文件定位
文件定位允许程序控制读写的位置。以下函数用于文件定位:
int fseek(FILE *stream, long offset, int whence)
- 功能:改变文件位置。
- 参数:
stream
:文件流。offset
:相对于whence
的偏移量(以字节为单位)。whence
:起始位置,指定偏移量的起点,可以是:SEEK_SET
:文件开头。SEEK_CUR
:当前位置。SEEK_END
:文件末尾。
- 返回值:成功时返回0,失败时返回非零值。
long ftell(FILE *stream)
- 功能:获取当前文件位置。
- 参数:
stream
:文件流。
- 返回值:返回当前文件位置的偏移量(以字节为单位)。如果失败,则返回
-1L
。
void rewind(FILE *stream)
- 功能:将文件位置重置到文件开头。
- 参数:
stream
:文件流。
- 返回值:无返回值。
关闭文件
完成文件处理后,务必关闭文件以释放资源::
int fclose(FILE *stream)
- 功能:关闭一个已打开的文件流。
- 参数:
stream
:文件流,需要关闭的文件流。
- 返回值:成功时返回0,失败时返回EOF。
注意事项:
- 确保格式字符串与文件中的数据格式相匹配。
- 注意处理文件打开失败或读取错误的情况。
- 在使用完文件后,记得关闭文件以释放资源。