专题3 标准IO编程

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;

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值