FILE * fopen(const char * pathname, const char * opentype);
打开由pathname指定的文件并创建一个与之相连的流。
int fclose(FILE * stream);
打开的流通过fclose函数来关闭,在流被关闭前,所有缓冲区的输出将被写出,所有缓冲区的输入将被丢弃。
FILE * freopen(const char * pathname, const char * opentype, FILE * stream);
重新打开指定文件,并使之与一个指定的流(stream指定的流)相连。作用类似于fopen函数与fclose函数的合并。先关闭stream指定的流,按照opentype的方式打开pathname指定的文件,并使之与stream指定的流相连接。
一旦打开一个流,就需要对流进行读写。有3种类型的无格式I/O函数:字符I/O函数,行I/O函数,块I/O函数。
1.字符I/O函数
字符输入函数中,getc函数最常用,其它两个基本不予使用。
#include <stdio.h>
int fgetc(FILE * stream);
int getc(FILE * stream);
int getchar(void);
字符输出函数中,putc函数最常用。
#include <stdio.h> int fputc(int c, FILE * stream); int putc(int c, FILE * stream); int putchar(int c);
2.行I/O函数
标准C库中有以下两个函数用于每次读入一行
#include <stdio.h> char * fgets(char *s, int count, FILE * stream); char * gets(char * s);
这里着重介绍一下fgets函数。
作用:从stream指定的流中至多读入一行字符至参数s指定的字符串中,参数count指明字符串s的空间大小。该函数从流中连续读字符直至读到换行符或者读够count -1个字符为止。 所读入的这一行字符包含最后的换行符,存储在参数s指定的数组中,并且在其末尾加一个空字符(\0)作为该字符串结束标志。
fgets函数比较安全,不会产生溢出,而gets函数没有为字符串s的溢出提供保护,因此我们最好不要使用gets。
LINUX中的GNU C库专门提供了另外一个一次读入一行的函数getline,此外还扩充了一个更通用的函数getdelim。
#include <stdio.h> ssize_t getline(char * * lineptr, size_t * n, FILE * stream); ssize_t getdelim(char * * lineptr, size_t * n, int delimter, FILE * stream);