专题3 标准IO编程

    技术2022-05-20  46

    1.       概述

    (1)       标准文件编程库中胜于文件创建、打开、关闭和删除的函数有:

    l  fopen:     打开文件流或创建文件函数

    l  freopen:  文件流替换函数

    l  fclose:     关闭文件流

    l  remove:   删除文件函数

    l  rename:   文件更名函数

    (2)       标准文件编程库中用于无格式字符输入的函数有getc, getchar, fgetc等。

    (3)       标准文件编程库中用于无格式字符输出的函数有putc, putcharfputc等。

    (4)       标准文件编程库中用于文件行输入的函数有getsfgets等。

    (5)       标准文件编程库中用于文件行输出的函数有putsfputs等。

    (6)       标准文件编程库中用于文件块输入输出的函数有freadfwrite等。

    (7)       标准文件编程库中用于格式化输出的函数有printffprintfsprintf

    (8)       标准文件编程库中用于格式化输入的函数有scanffscanfsscanf等。

    (9)       标准文件编程库中用于定位文件读写位置的函数有:

    l  fseek:      设置文件流当前位置

    l  rewind:   重置文件流

    l  ftell:              获取文件流

    (10)   标准文件编程库中用于文件状态的函数如下:

    l  feof:判断文件流是否结束。

    l  ferror:     判断文件流操作是否发生错误。

    l  clearer:    置空文件流中的错误标志。

    (11)   标准文件编程库提供了三种缓冲模式:全缓冲、行缓冲和无缓冲,其中用于文件缓冲的函数有:

    l  setbuf:     设置缓冲模式(缓冲大小为BUFSIZ

    l  setvbuf:   设置缓冲模式(缓冲大小由调用者指定)

    l  fflush:     刷新缓冲区

     

    2.       实践经验

    文件读写:r模式一般应用于读文件处理中,比如批量代发时读入第三方上送的交易数据,导入第三方提供的报表文件数据等。w模式一般应用在单进程文件写入处理中,比如报表文件的创建与完成等。a模式一般应用于多个进程同时写入同一文件的处理中,比如记录日志文件等。

    文件指针在打开后务必检查是否可用。函数freopen常用于比标准输入、输出和错误进行重定向。

    设计用户直接阅读的文件时,选择文本文件。设计程序阅读的文件时,选择二进制文件。

    字符输入函数族虽然每次读取一个字符,但是其返回值为整型,故在返回值变量中务必定义为“int”,而不是“char”或“unsigned char”,否则将会读取到错误的信息。

    如果程序需要同时打开两个以或两个以上文件,当后一个文件的打开操作发和错误,而不得不退出时,请务必关闭前面已经打开的文件。

     

    3.       例子

    3.1   变长参数

    #include <stdarg.h>

    int mysum(int I, …)

    {

            int r = 0;

            int j = 0;

            va_list pvar;

            va_start(pvar, i);

            for(j=0; j<i; j++)

            {

                   r += va_arg(pvar, int);

    }

    va_end(pvar);

    return r;

    }

     

    int printLog(FILE * pfile, const char * pformat, …)

    {

            va_list _va_list;

            char szBuf[1024];

            if(pformat == NULL || pfile == NULL)

                   return -1;

            va_start(_va_list, pformat);

            vsprintf(szBuf, pformat, _va_list);

            va_end(_va_list);

            fputs(szBuf, pfile);

            return 0;

    }

     

    PS:  od命令用于dump files in octal and other formats

    1.1   文件的状态

    标准文件编程库中用于文件状态的函数如下:

    int ferror(FILE *stream);

    int feof(FILE *stream);

    int clearer(FILE *stream);

    //在错误发生后立马调用语句“sterror(errno)”可以获取当前的错误提示信息

    实例代码:

    char *strerror(int errnum);

    /**

     *读取文件”etc/passwd",当文件结束时自动退出

     */

    #include <stdio.h>

     

    int main()

    {

    FILE *fp;

    char buf[1024];

    if((fp=fopen("/etc/passwd", "r")) == NULL)

    {

            printf("Open file passwd failed./n");

            return;

    }

    //标注红线部分为函数feof的调用模板

    while(!feof(fp))

    {//feof 在文件读取结束后返回非0

            fgets(buf, sizeof(buf), fp);

            if(feof(fp))

                   break;

            fputs(buf, stderr);

    }

     

    return 0;

    }

     

     

     

     


    最新回复(0)