在启动程序时,有三个文件是自动打开的,它们是stdin、stdout和stderr。它们都是在stdio.h头文件中定义的,分别代表着标准输入、标准输出和标准错误输出,与底层文件描述符0、1和2相对应。
本节将介绍标准I/O库中的下列库函数:
fopen、fclose
fread、fwrite
fflush-
fseek-
fgetc、getc、getchar
fputc、putc、putchar
fgets、gets
printf、fprintf和sprintf
scanf、fscanf和sscanf
1. fopen函数
函数原型:
#include <stdio.h>
FILE *fopen(const char *filename,const char *mode);
fopen库函数类似于底层的open系统调用。它主要用于文件和终端的输入输出。fopen打开由filename参数指定的文件,并把它与一个文件流关联起来。mode参数指定文件的打开方式,它取下列字符串中的值:
"r"或"rb":以只读方式打开
"w"或"wb":以写方式打开,并把文件长度截断为零。
"a"或"ab":以写方式打开,新内容追加在文件为为尾。
"r+"或"rb+"或"r+b":以更新方式打开(读和写)
"w+"或"wb+"或"w+b":以更新方式打开,并把文件长度截断为零。
"a"或"ab"或"a+b":以更新方式打开,新内容追加在文件为为尾。
字母b表示文件是一个二进制文件而不是文本文件。
2. fread函数
函数原型:
#include <stdio.h>
size_t fread(void *ptr,size_t size,size_t nitems,FILE *stream);
fread库函数用于从一个文件流里读取数据。数据从文件流strean读到由ptr指向的数据缓冲区里。fread和fwrite都是对数据记录进行操作,size参数指定每个数据记录的长度,计数器nitems给出要传输的记录的个数。它的返回值是成功读到缓冲区里的记录个数。
3. fwrite函数
函数原型:
#include <stdio.h>
size_t fwrite(const void *ptr,size_t size,size_t nitems,FILE *stream);
fwrite库函数和fread函数有相似的借口。它从指定的数据缓冲区里读出数据记录,并把它们写到输出流中。它的返回值是成功写入的记录个数。
4. fclose函数
函数原型:
#include <stdio.h>
int fclose(FILE *stream);
fclose函数关闭指定的文件流stream,使所有尚未写出的数据都写出。
程序实例:
fread.c
#include <stdio.h>
int main()
{
size_t n,m;
char buf[10];
FILE *fp1,*fp2;
fp1 = fopen("test1","r");
fp2 = fopen("test2","w");
n = fread(buf,sizeof(buf),1,fp1);
fwrite(buf,sizeof(buf),1,fp2);
exit(0);
}
程序运行前test1内容为 zhangxm ,test2中没有内容。
程序运行后test2中内容为:
zhangxm
^D^H
注:后面的乱码没有被解决。