#include<stdio.h>
标准输入输出库,位置在/usr/include/stdio.h
stdio.h-->stdio.c-->libc.so (so动态库文件/usr/lib)
FILE 结构定义的对象 FILE * 称之为流对象,也叫文件流指针。
一、fopen函数
函数作用是打开文件,函数原型为:
FILE *fopen(const char *path, const char *mode);
FILE*是一个指向结构体的指针。filename
:这是一个指向字符串的指针,表示要打开的文件的名称。可以是相对路径或绝对路径。
mode
:这是一个指向字符串的指针,表示打开文件的模式。常见的模式包括:"r"
:以只读方式打开文件。文件必须存在。"r+"
:以读写方式打开文件。文件必须存在。"w"
:以写入方式打开文件。如果文件不存在则创建文件,如果文件存在则清空文件内容。"w+"
:以读写方式打开文件。如果文件不存在则创建文件,如果文件存在则清空文件内容。"a"
:以追加方式打开文件。如果文件不存在则创建文件,如果文件存在则在文件末尾追加数据。"a+"
:以读写方式打开文件。如果文件不存在则创建文件,如果文件存在则在文件末尾追加数据。
此外,还可以在模式字符串中添加 b
以表示二进制模式,例如 "rb"
,"wb"
和 "ab"
。
返回值
- 成功时:返回一个指向
FILE
类型的指针,表示已打开的文件。 - 失败时:返回
NULL
,并设置全局变量errno
以指示错误原因。
二、fgetc/fputc
fputc
和 fgetc
是标准 C 库中的两个函数,用于字符的文件读写操作。它们分别用于向文件写入一个字符和从文件读取一个字符。
fputc
函数
fputc
用于向文件写入一个字符。其原型如下:
int fputc(int char, FILE *stream);
char
:要写入的字符,作为一个整数传递。stream
:指向要写入的文件的文件指针。- 成功时返回写入的字符,失败时返回
EOF
并设置错误标志。
fgetc
函数
fgetc
用于从文件读取一个字符。其原型如下:
int fgetc(FILE *stream);
stream
:指向要读取的文件的文件指针。
成功时返回读取的字符,若到达文件末尾或发生错误则返回 EOF
。
三、fgets/fputs
fgets
和 fputs
是标准 C 库中的两个函数,用于字符串的文件读写操作。它们分别用于从文件读取一行字符串和向文件写入一行字符串。
fgets
函数
fgets
用于从文件读取一行字符串。其原型如下:
char *fgets(char *str, int n, FILE *stream);
str
:用于存储读取字符串的字符数组指针。n
:指定读取的最大字符数(包括终止符\0
)。 所以读取到的数量是最大字符数 - 1.stream
:指向要读取的文件的文件指针。- 成功时返回
str
,若到达文件末尾或发生错误则返回NULL
。
fputs
函数
fputs
用于向文件写入一行字符串。其原型如下:
int fputs(const char *str, FILE *stream);
str
:指向要写入的字符串。stream
:指向要写入的文件的文件指针。- 成功时返回一个非负值,失败时返回
EOF
。
fputc/fgetc和fputs/fgets只能处理文本文件,不能处理视频图像文件
四、fread/fwrite
fwrite
和 fread
是标准 C 库中的两个函数,用于二进制文件的读写操作。
fwrite
函数
fwrite
用于将数据块写入文件。其原型如下:
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
ptr
:指向要写入数据的内存块。size
:每个数据块的大小,以字节为单位。count
:要写入的块的数量。stream
:指向要写入的文件的文件指针。- 返回成功写入的块数。如果返回值小于
count
,则可能发生了错误或者到达了文件末尾。
fread
函数
fread
用于从文件读取数据块。其原型如下:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
ptr
:指向存储读取数据的内存块。size
:每个数据块的大小,以字节为单位。count
:要读取的块的数量。stream
:指向要读取的文件的文件指针。- 返回成功读取的块数。如果返回值小于
count
,则可能发生了错误或者到达了文件末尾。
五、标准输入输出流
stdin
是标准输入流,通常与键盘输入关联。程序从 stdin
读取数据,常用于接受用户输入。
stdout
是标准输出流,通常与显示器(终端)输出关联。程序通过 stdout
将结果输出到屏幕。
stderr
是标准错误流,通常用于输出错误信息,默认也与显示器(终端)关联。与 stdout
不同,stderr
通常不会被重定向到文件,因此适合输出错误信息。
fgetc()/fputc()面试题:
如何用最短的代码实现用户任意输入并打印输出。
要求用fgetc/fputc函数实现。
while(1)
fputc(fgetc(stdin),stdout);