专题3 标准IO编程
1. 概述
(1) 标准文件编程库中胜于文件创建、打开、关闭和删除的函数有:
l fopen: 打开文件流或创建文件函数
l freopen: 文件流替换函数
l fclose: 关闭文件流
l remove: 删除文件函数
l rename: 文件更名函数
(2) 标准文件编程库中用于无格式字符输入的函数有getc, getchar, 和fgetc等。
(3) 标准文件编程库中用于无格式字符输出的函数有putc, putchar和fputc等。
(4) 标准文件编程库中用于文件行输入的函数有gets和fgets等。
(5) 标准文件编程库中用于文件行输出的函数有puts和fputs等。
(6) 标准文件编程库中用于文件块输入输出的函数有fread和fwrite等。
(7) 标准文件编程库中用于格式化输出的函数有printf、fprintf和sprintf等
(8) 标准文件编程库中用于格式化输入的函数有scanf、fscanf和sscanf等。
(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;
}
转载于:https://my.oschina.net/fuyajun1983cn/blog/263896
专题3 标准IO编程相关推荐
- 《Linux操作系统 - 高级编程》第一部分 标准IO及文件IO(第2章 标准IO)
2.1 Linux I/O概述 2.1.1文件I/O和标准I/O的概念 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O).不带缓存指的是每个read,write都调用内核中的 ...
- 《Unix环境高级编程》---标准IO
一.基础结构 1.文件 FILE FILE是标准IO用来表示文件的结构体,所有标准IO都以FILE为基础. stdin FILE类型的指针,指向标准输入流. stdout FILE类型的指针,指向标准 ...
- 标准IO库--unix环境高级编程读书笔记
标准IO库是C语言提供的一个库,不光存在于linux中,在windows中也是有的.标准IO库和文件IO的不同是,标准IO库是对文件IO(即系统调用)的封装,并且在用户层添加了一些缓冲区. 文件IO的 ...
- 应用编程课程4.系统IO和标准IO的比较,自己做的一些理解,仅仅方便自己看
/* 1.注意fseek实际上是调用lseek来实现的, 比较以下标准io与文件io的区别 注意:在stream这个概念中,有三个标准流stdin.stdout.stderr,,在我们当前这个文件描述 ...
- 《UNIX环境高级编程》笔记 第五章-标准IO库
1. 流和FILE对象 在第三章的系统调用都是围绕文件描述符fd的.但是标准I/O库函数操作则是围绕流进行的.当使用标准I/O库打开或创建一个文件时,使用一个流与一个文件关联. 当打开一个流时,标准I ...
- Python学习笔记十 IO编程
参考教程:廖雪峰官网https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 IO编程 I ...
- JAVA网络IO编程
2019独角兽企业重金招聘Python工程师标准>>> JAVA网络IO编程(BIO NIO AIO) 一.传统的BIO编程 1.网络编程的基本模型是C/S模型,即两个进程间的通信. ...
- Python学习笔记:Io编程序列化
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python之IO编程
前言:由于程序和运行数据是在内存中驻留的,由CPU这个超快的计算核心来执行.当涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.由于CPU和内存的速度远远高于外设的速度,那么在IO编程中就存在 ...
最新文章
- Pytorch中多GPU训练指北
- 交通信号灯检测与行人过马路策略
- sqlserver数据文件位置如何迁移
- dubbo 服务压测_全链路压测资料汇总——业内大厂解决方案
- java代码杨辉三角_用java实现杨辉三角的示例代码
- 通过JavaFX标注制作动画效果
- iphonexr电池容量_iPhone12mini电池容量多少毫安能用多久 iPhone12mini适合打游戏王者吗...
- 大容量内存的电脑提速技巧
- php找100到1000之间的素数_php编程输出100以内的素数
- 发票ocr识别查验解决方案
- hashcat破解密码规则示例
- 2021-01-27
- php 送货单管理系统,销售送货单管理系统下载
- 笔记本安装win10+ubuntu双系统超详细教程
- HDU 5651 xiaoxin juju needs help 组合数
- springBoot启动错误:Field categoryMapper in xxx.xxx.service.impl.CategoryServiceImpl required a bean of
- Azure认证 Administrator Associate(AZ-104) 考试指南,资料分享
- 工信部域名icp查询 在哪查询域名icp信息
- Java匿名内部类方法调用
- Python文档基础操作