• 2018-08-13 (星期一)


    2018-08-13 (星期一)
    取得当前流位置
        不同步lseek(),fseek()并不会返回更新过得位置.为此,另外提供了一个接口.ftell()函数可用于返回stream的当前流:

    #include <stdio.h>
    long ftell(FILE *stream)

        发生错误时,它会返回-1并且将errno设定成适当的值.
        此外,标准I/O链接库还提供了fgetpos():

    #include <stdioh.h>
    int fgetpos(FILE *stream, fpos_t *pos);

    执行成功时,fgetpos()会返回0并且将stream的当前流位置放于pos;执行失败时,它会返回-1并且将errno设定成适当的值.如同fsetpos(),之所以会提共fgetpos(),只是因为非linux平台具体负责的文件位置数据类型.

    刷新一个流
        标准I/O链接库提供了一个接口,可用户将用户缓冲区写出到内核,以确保write()写入至流的所有数据可以被刷新.fflush()函数提供了此功能:

    #include <stdio.h>
    int fflush(FILE *stream);

        调用此函数时,stream所指向的流中任何未被写入内核的数据会被刷新至内核.如果stream为NULL,侧进程中所打开的输入流均会被舒心.执行成功时,fflush()会返回0,执行失败时,它会返回EOF并且讲errno设定成适当的值.
        要了解fflush()所造成的影响,必须了解C链接库所维护的缓冲区和内核的缓冲机制有何差异.

    错误与EOF
        有些标准I/O借口,例如fread(),无法有效的将执行失败的情况传达给调用者,因为他们没有提供任何机制区分错误和EOF.对于这些调用以及其他场合,这可以检查特定流的状态,以确定它到地址遇到了错误还是抵达了文件末端.为此标准I/O链接库提供了两个接口.函数ferror()用于测试stream智商是否设定了错误指示器:

    #include <stdio.h>
    int ferror (FILE *stream);

        错误指示器由其他的标准I/O接口所定义,用于反应错误状态.如果设定了指示器,则此函数会返回一个非零值,否则返回0.
        函数feof()用于测试stream之上是否是定了EOF指示器:

    #include <stdio.h>
    int feof (FILE *stream);

        EOF 指示器由其他的标准I/O接口所设定,英语反应抵达了文件的末端.如果设定了指示器,此函数会返回一个非零值,否则返回0.
        函数clearerr()用于清楚stream之上的错误和EOF指示器:

    #include <stdio.h>
    void clearerr(FILE *stream);

        此函数没有返回值,而且也不会失败 (无法知道所提供流是否有效).你应该在检查错误与EOF指示器之后调用clearerr(),因为你无法在时候挽回被清除的指示器.

        /* 'f'十个有效的流 */
        if (ferror (f))
            printf ("Error on f!
    ");
        if (feof (f))
            printf ("EOF on f!
    ");
        clearerr(f);

    取得相应的文件描述符
        有时,取得支持指定流的文件描述符会很有用.例如,要对流进行系统调用时,如果不存在相关联的标准I/O函数,则可以通过它的文件描述符.要取得支持(backing)流的文件描述符,可以使用flleno ():

    #include <stdio.h>
    int fileno(FILE *stream);

    执行成功时,fileno会返回与stream相关联的文件描述符;执行失败时,它会返回-1,这只会发生在指定了无效的流时,在此情况下,fileno()会把errno设定成EBADF.


  • 相关阅读:
    第六章 函数、谓词、CASE表达式 6-3 CASE表达式
    第六章 函数、谓词、CASE表达式 6-2 谓词
    第六章 函数、谓词、CASE表达式 6-1 各种各样的函数
    第五章 复杂查询 5-3 关联子查询
    第五章 复杂查询 5-2 子查询
    第五章 复杂查询 5-1 视图
    第四章 数据更新 4-3 事务
    第四章 数据库和SQL 4-3 数据的更新(UPDATE语句的使用方法)
    面向对象进阶
    多态
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/9471823.html
Copyright © 2020-2023  润新知