标准 I/O (带缓冲)
标准IO中分文本流和二进制流
windows系统中:(1) 二进制流 - 换行符 '\n' (2) 文本流 - 换行符 ‘\r' '\n'
linux 系统中:不区分文本流和二进制流:换行符 - '\n'

一 。标准I/O 提供3种类型的缓冲(流的缓冲)
1. 行缓冲(大小1024字节);刷新行缓存的方法 (1)程序正常结束,(2)行缓冲区满,(3)遇到 '\n' ,(4)使用fflush函数
2. 全缓冲(大小4096字节);刷新全缓存的方法 (1)程序正常结束,(2)行缓冲区满,(3)使用fflush函数;
3. 不带缓存;标准IO库不对字符进行缓冲,例如标准出错stderr
二 。系统分配的3个流:
标准输入 stdin; 标准输出 stdout ; 标准错误 stderr ;(标准I/O预定义3个流,当进程创建或者开启的时候,系统就会先分配三个流指针)

三 。文本流:
通过 FILE 创建一个流指针实现对文本流的操作
打开一个文本的mode参数选择

头文件 <stdio.h>
1. 流的打开:FILE * fopen(const *char path, const char *mode) ; 参数,文件的路径和打开的模式(只读,只写等) , 返回这个文本的指针,可对这个文本流进行读写操作等。
2. 流的关闭:int fclose( FILE *stream ); 参数要关闭的文本流,失败返回EOF(-1) ,成功返回 0
3. 向流中写入一个字符 : int fputc(int c, FILE *stream); 参数要输出的字符,和输出到那个流中(可以是标准流,文本流), 失败返回EOF, 成功返回 写入的字符
4. 从流中读取一个字符: int fgetc(FILE *stream); 参数 在那个流中读取字符,返回读取的字符(ascii对应)
6. 从流中读取多个字符: char *fgets(char *s, int size, FILE *stream); 参数 s 存放读取的数据, size 读取多少个字符,stream 从哪个流读取的流指针;成功返回 s,失败返回NULL
7. 向流中写入多个字符:int fputs(const char *s, FILE *stream); 参数,把 s 中的数据写入到stream指向的流中,成功返回1 失败返回-1
8. 刷新缓存: int fflush(FILE *stream); 参数,要刷新的流 成功返回0,失败返回EOF
例子1:从终端输入获取字符,然后写到文本中
#include <stdio.h> int main(int argc, const char *argv[])
{
char buf[] = {}; //定义缓冲区,从终端获取数据,往文本流中写入
#if 0
//向终端输出
puts("HHHHHHHH");
fputs("HAHGAGAGAGAGA\n",stdout); //输出到标准输出流中,(输出到终端上)
#endif //终端获取数据放到 buf 中,一会把 buf 中的内容写到文本流中
char ch=;
int i=;
while((ch=getchar())!='q' && i<) //终端输入遇到 q 或者 到达最大缓存,结束输入
{
buf[i++] = ch;
} #if 1
//向文本中输出
FILE *fp = NULL;
if((fp = fopen(argv[],"w")) == NULL) //参数 "w" 表示写入,每次打开文件先清空文件,再写入数据
{
perror("open fail:");//标准错误输出
return -;
}
//把 buf 中的数据写入到 fp 指向文本流中
fputs(buf,fp);//把数据写入文本流中, fgets 不带换行符输入到文本流中
fclose(fp); //关闭文本流
#endif
return ;
}
测试结果:

例子2,从文本流中读取数据
#include <stdio.h> int main(int argc, const char *argv[])
{
char buf[] = {};//定义 存放读取的数据 FILE *fp = NULL;
if((fp=fopen(argv[],"r")) ==NULL)
{
perror("open fail:");
} // fgets 只读取一行的指定个数的内容//循环把文本流中的数据读完
while((fgets(buf,,fp)) != NULL)//读取全部数据
{
printf("%s",buf); //打印读取到的数据
}
fclose(fp);
return ;
}

四 。 出错处理
1. 头文件<stdio.h> void perror(const char *s); 参数输出到终端的提示语,后面会跟着打开错误错误类型提示
2. 头文件<string.h> char *strerror(int errnum); 参数 errnum 错误号,错误原因的信息
标准 I/O (带缓冲)的更多相关文章
- 带缓冲的IO和不带缓冲的IO
文件描述符: 文件描述符是一个小的非负整数,是内核用来标识特定进程正在访问的文件 标准输入/输出/出错: shell为每个程序打开了三个文件描述符,STDIN_FILEON,STDOUT_FILEON ...
- 第十三篇:带缓冲的IO( 标准IO库 )
前言 在之前,学习了 read write 这样的不带缓冲IO函数. 而本文将讲解标准IO库中,带缓冲的IO函数. 为什么要有带缓冲IO函数 标准库提供的带缓冲IO函数是为了减少 read 和 wri ...
- 带缓冲的IO( 标准IO库 )
前言 在之前,学习了 read write 这样的不带缓冲IO函数.而本文将讲解标准IO库中,带缓冲的IO函数. 为什么要有带缓冲IO函数 标准库提供的带缓冲IO函数是为了减少 read 和 writ ...
- JavaScript原生折叠扩展收缩菜单带缓冲动画
JavaScript原生折叠扩展收缩菜单带缓冲动画 @落雨 <div id="div_two" style="display: none;"> &l ...
- 文件I/O(不带缓冲)概述
一.引言 UNIX系统中大多数文件I/O只需用到5个函数:open.read.write.lseek以及close.这些函数经常被称为不带缓冲的I/O(unbuffered I/O).术语不带缓冲指的 ...
- 带缓冲I/O和不带缓冲I/O的区别与联系
转自:http://blog.csdn.net/lmh12506/article/details/6803847 首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用, ...
- 带缓冲I/O 和不带缓冲I/O的区别与联系
首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用.系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其 ...
- UNIX环境编程学习笔记(2)——文件I/O之不带缓冲的 I/O
lienhua342014-08-25 1 文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符. ...
- js+css实现带缓冲效果右键弹出菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 文件I/O(不带缓冲)之原子操作
一.添写至一个文件 考虑一个进程,它要将数据添加到一个文件尾端.早期的UNIX系统并不支持open的O_APPEND选项,所以程序被编写成下列形式: ) < ) /* position to E ...
随机推荐
- sql语句(删除重复数据只保留一条)
用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...
- android中的国际化
java国际化步骤: 定义资源文件: baseName_language_country.properties baseName_language.properties baseName.proper ...
- Redis Desktop Manager连接Redis 遇到的一系列问题
最近在做一个土地项目的后台,主要是一个信息采集调查系统,使用的框架是: * 核心框架:Spring Framework 4.2 * 日志管理:SLF4J 1.7.Log4j 1.2 * 视图框架:Sp ...
- teb教程9
通过costmap_converter来跟踪和包含动态障碍物 简介:利用costmap_converter来很容易跟踪动态障碍物 1.costmap_converter中提供了一个插件称之为costm ...
- ZOJ-3662 Math Magic 背包DP
这题不错,可惜我还是太弱了,没想到qwq. 看了网上大佬题解之后写的,对比了一下代码,好像我写的还是挺简洁的(逃,只是吞行比较多). 因为直接用lcm的值做下标会超时,所以我们观察发现可以组成lcm为 ...
- 【前端优化】图片延迟加载Lazy-loading的原理与简单实现
1.什么是lazy-loading 图片"懒加载" 为img标签src设置统一的图片链接,而将真实链接地址装在自定义属性中. 所以开始时候图片是不会加载的,我们将满足条件的图片的s ...
- 解决mybatisplus saveBatch 或者save 无法插入主键问题
解决mybatisplus saveBatch 或者save 无法插入主键问题 通过跟踪源码后得出结论,由于插入的表的主键不是自增的,而是手动赋值的,所以在调用saveBatch 执行的sql语句是没 ...
- SDK打开模拟器遇到SDK包里缺少API组件,附上我的解决历程,心累
背景描述:之前一直用真机做自动化,突然被要求用模拟器,就开始准备环境,发现模拟器里少很多配置,前提:配置了Android环境变量,且配置了代理如下:大连东软信息学院镜像服务器地址:http://mir ...
- Java中的LinkedList
- 重视项目排期,对dateline 有所敬畏
项目排期 = 个人任务完成 + 风险预估 + 意外情况 + 项目上下游依赖 个人任务完成 个人任务具体话 不要考虑私人情感,专注工作 风险预估 对可能出现的情况进行考虑 意外情况 对出现的意外情况提前 ...