C文件输入/输出

FILE * fopen (const char * restrict filename, const char * restrict modes)

打开一个文件流。

它的第一个参数是要打开的文件名;更确切地说,是包含该文件名的字符串的地址。第二个参数是用于指定文件打开模式的一个字符串。返回值为文件指针。

C库提供了一些可能的模式:

模式字符串 意义
"r" 打开一个文本文件,只可以读取文件。文件必须存在。
"w" 打开一个文本文件,只可以写入文件,先将文件的长度截为零。如果该文件不存在则先创建之。
"a" 打开一个文本文件,只可以向已有文件的结尾追加内容。初始时文件指针定位在文件结束位置。如果该文件不存在则先创建之。
"r+" 打开一个文本文件,可以进行更新,也即可以读取和写入文件。初始时文件指针定位在文件开始位置。文件必须存在。
"w+" 打开一个文本文件,可以进行更新(读取和写入),如果该文件存在则首先将其长度截为零;如果不存在则先创建之。
"a+" 打开一个文本文件,可以进行更新(读取和写入),向已有文件的尾部追加内容,如果该文件不存在则先创建之;可以读取整个文件,但写入时只能追加内容。

"rb", "wb", "ab", "ab+", "a+b", "wb+", "w+b", "ab+", "a+b"

与前面的模式类似,只是使用二进制模式而非文本模式打开文件

对于像Unix和Linux这样只有一种文件类型的系统,带b字母的模式和对应的不带b字母的模式是相同的。

int fclose (FILE *stream)

关闭已打开的文件流,同时根据需要刷新缓冲区。更正规的程序也许还要检查是否成功关闭了文件。

参数为文件指针。如果文件成功关闭,函数返回0,否则返回EOF。

int fflush (FILE *stream)

刷新指定文件流的缓冲区。如果参数为空则刷新所有缓冲区。

int getc (FILE *stream)

int fgetc (FILE *stream)

从指定文件中获得一个字符。如果读到文件结尾则返回EOF。

int putc (int c, FILE *stream)

int fputc (int c, FILE *stream)

将字符c写入FILE指针指定的文件中。如果成功则返回该字符,否则返回EOF。

int fprintf (FILE * restrict, const char * restrict, ...)

格式化输出函数,第一个参数为文件指针,后两个参数与printf相同。

返回被成功输出的字符数。

int fscanf (FILE * restrict, const char * restrict, ...)

格式化输入函数,第一个参数为文件指针,后两个参数与scanf相同。

返回成功输入的变量个数,遇到文件结尾返回EOF。

char * fgets (char * restrict s, int n, FILE * restrict stream)

输入一个字符串。

第一个参数为目的字符串数组,第二个参数为要读取的最大长度,第三个参数为文件来源。返回该字符串地址,遇到文件结尾返回NULL。

该函数读取到它所遇到的第一个换行字符的后面,或者读取比最大长度n少一个字符,或者读取到文件结尾时结束。然后向末尾添加一个空字符以构成一个字符串。

与gets不同的是,fgets函数不会丢弃换行符

int fputs (const char * restrict s, FILE * restrict stream)

输出一个字符串。

第一个参数为字符串的源地址,第二个参数为目的文件。写入成功返回一个非负值,失败返回EOF。与puts不同的是,fputs不会额外输出换行符

int fseek (FILE * stream, long int off, int whence)

fseek( )函数允许您像对待数组一样对待一个文件,在打开的文件中直接移动到任意字节处。

第一个参数是指向文件的FILE指针;第二个参数称为偏移量,表示从起始点开始要移动的距离;第三个参数是模式,用来标识起始点。如果一切正常,fseek( )返回值为0,出现错误返回-1。

模式常量如下:

模式 偏移量起点
SEEK_SET 文件开始
SEEK_CUR 当前位置
SEEK_END 文件结尾

函数调用的例子:

fseek (fp, 0L, SEEK_SET); // 找到文件的开始处

fseek (fp, 10L, SEEK_SET); // 找到文件的第10个字节

fseek (fp, 2L, SEEK_CUR); // 从文件的当前位置向前移动2个字节

fseek (fp, 0L, SEEK_END); // 到达文件结尾处

fseek (fp, -10L, SEEK_END); // 从文件结尾处退回10个字节

ANSI对该函数降低了要求:

对于二进制模式,C实现不需要支持SEEK_END模式。

在文本模式中,只要求保证如下这些调用有效:

fseek (file, 0L, SEEK_SET) 到文件开始
fseek (file, 0L, SEEK_CUR) 在当前位置不动
fseek (file, 0L, SEEK_END) 到文件结尾
fseek (file, ftell-pos, SEEK_SET)  到距文件开始处ftell-pos字节的位置,ftell-pos是ftell( )的返回值

long int ftell (FILE * stream)

以一个long类型值返回一个文件的当前位置。

void rewind (FILE * stream)

将当前指针回到文件的开始处。

int ungetc (int c, FILE * stream)

将c指定的字符放回输入流中。如果向输入流中放入了一个字符,下次调用标准输入函数就会读入那个字符。ANSI C标准保证每次只会放回一个字符。若调用成功,该函数返回回退的字符,否则返回EOF。

int setvbuf (FILE * restrict stream, char * restrict buf, int modes, size_t n)

建立一个供标准I/O函数使用的替换缓冲区。打开文件以后,在没有对流进行任何操作以前,可以调用这个函数。

由指针stream指定流;buf指向将使用的存储区,如果buf的值是NULL则函数会自己分配一个缓冲区,否则必须已经创建这个缓冲区;n指定数组的大小;modes从以下选项中选取:_IOFBF表示完全缓冲(缓冲区满的时候刷新),_IOLBF表示行缓冲(缓冲区满的或者一个新行写入的时候刷新),_IONBF表示无缓冲。如果成功执行,函数会返回0;否则返回一个非零值。

size_t fread (void * restrict ptr, size_t size, size_t n, FILE * restrict stream)

二进制方式读取文件中的内容到ptr数组中。

ptr指向目的地,size表示每次读取的数据块的大小,n表示读取的数据块的数量,stream表示文件来源。返回成功读入的数据块的数量。

size_t fwrite (const void * restrict ptr, size_t size, size_t n, FILE * restrict stream)

二进制方式写入ptr数组中的内容到文件中。

ptr指向数据源,size表示每次读取的数据块的大小,n表示读取的数据块的数量,stream表示目的文件。返回成功写入的数据块的数量。

int feof (FILE * stream)

如果最近一次输入调用检测到文件结尾,feof( )函数返回一个非零值(表示真),否则返回零值(表示假)。

int ferror (FILE * stream)

如果最近一次读写操作发生错误,ferror( )函数返回一个非零值(表示真),否则返回零值(表示假)。

原文地址:https://www.cnblogs.com/qwertWZ/p/2868198.html