• 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( )函数返回一个非零值(表示真),否则返回零值(表示假)。

  • 相关阅读:
    java修改应用程序标题栏
    电动双轮车
    Oracle执行计划相关(待补充)
    SQL中IN和EXISTS用法的区别
    union all与union all
    equals与hashcode
    文件上传的整个流程
    adwords与adsence
    struts2文件上传大小
    为什么是UUID做主键
  • 原文地址:https://www.cnblogs.com/qwertWZ/p/2868198.html
Copyright © 2020-2023  润新知