标准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[1024] = {0}; //定义缓冲区,从终端获取数据,往文本流中写入
#if 0//向终端输出puts("HHHHHHHH");fputs("HAHGAGAGAGAGA\n",stdout); //输出到标准输出流中,(输出到终端上)
#endif//终端获取数据放到 buf 中,一会把 buf 中的内容写到文本流中char ch=0;int i=0;while((ch=getchar())!='q' && i<1024) //终端输入遇到 q 或者 到达最大缓存,结束输入
    {buf[i++] = ch;}#if 1//向文本中输出FILE *fp = NULL; if((fp = fopen(argv[1],"w")) == NULL) //参数 "w" 表示写入,每次打开文件先清空文件,再写入数据
    {perror("open fail:");//标准错误输出return -1;}//把 buf 中的数据写入到 fp 指向文本流中fputs(buf,fp);//把数据写入文本流中, fgets 不带换行符输入到文本流中fclose(fp); //关闭文本流
#endifreturn 0;
}

测试结果:

例子2,从文本流中读取数据

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

四 。 出错处理

1.  头文件<stdio.h>    void perror(const char *s);    参数输出到终端的提示语,后面会跟着打开错误错误类型提示

2.  头文件<string.h>   char *strerror(int errnum);    参数  errnum 错误号,错误原因的信息

转载于:https://www.cnblogs.com/electronic/p/10907403.html

标准 I/O (带缓冲)相关推荐

  1. 1.深度好文:带缓冲I/O 和不带缓冲I/O的区别与联系

    首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用.系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其 ...

  2. 带缓冲的I/O操作和不带缓冲的I/O操作

    首先要明白不带缓冲的概念:所谓不带缓冲,并不是指内核不提供缓冲,而是只单纯的系统调用,不是函数库的调用.系统内核对磁盘的读写都会提供一个块缓冲(在有些地方也被称为内核高速缓存),当用write函数对其 ...

  3. 带缓冲的IO和不带缓冲的IO

      文件操作中有两套函数,一套是C库中的 fopen().fread()-,还有一套是linux的系统调用 open().read()-   虽然都是实现文件操作,但它们之间还是有一些不同.或许在网上 ...

  4. 第三次学JAVA再学不好就吃翔(part108)--带缓冲的字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 带缓冲的字符流 BufferedReader和BufferedWriter readLine和newLine方法 IO流 带缓冲的字符流 Buffere ...

  5. 带缓冲的输入/输入流

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  6. 网络编程-libevnet不带缓冲的事件框架

    网络编程-libevnet不带缓冲的事件框架 1.1工作流程 图1 工作流程 常用的API: 分类 API 含义 事件 框架 struct event_base* event_base_new(voi ...

  7. php 漂浮广告代码,JavaScript实现带缓冲效果的随屏滚动漂浮广告代码

    本文实例讲述了JavaScript实现带缓冲效果的随屏滚动漂浮广告代码.分享给大家供大家参考,具体如下: 这里演示了始终随屏滚动的JavaScript代码,在国内的应用泛滥成灾了,特别是一些喜欢漂浮广 ...

  8. Go 带缓冲的Reader读文件、一次性读取文件

    带缓冲的Reader读文件 读取文件的内容并显示在终端(带缓冲区的方式),使用 os.Open, file.Close, bufio.NewReader(),reader.ReadString 函数和 ...

  9. Java的IO操作(五) - PrintStream类、字符流、Reader和Writer、带缓冲的字符流BufferedReader和BufferedWriter...

    1. PrintStream类 我们都知道,int类型在Java中占4个字节,如1在内存中表示为 00000000 00000000 00000000 00000001.如果我们直接使用OutputS ...

最新文章

  1. 关于Windows8.1更新后Sql Server服务消失的处理办法
  2. 蓝桥杯 第十届 JAVAB组 E迷宫
  3. bzoj3224: Tyvj 1728 普通平衡树(打个splay暖暖手)
  4. jsr 正则验证_Java数据校验(Bean Validation / JSR303)
  5. 大数据学习笔记59:初探Kafka消息系统
  6. 501.二叉搜索树中的众数
  7. 【强化学习入门】梯度赌博机算法中,偏好函数更新:梯度上升公式是精确梯度上升的随机近似的证明
  8. Windows MongoDB安装配置
  9. 拓端tecdat|R语言使用特征工程泰坦尼克号数据分析应用案例
  10. c++把字符串逆序输出
  11. 第一部分:基础篇(一)
  12. 【乱七八糟的笔记】——前缀树
  13. 预训练综述 Pre-trained Models for Natural Language Processing: A Survey 阅读笔记
  14. hp打印机没连上计算机,win7电脑连接惠普打印机后文件打印不出来怎么办
  15. ORB_SLAM2及其他SLAM精度测评
  16. 程序员也要学英语——倒装、强调和省略
  17. 公司生活备忘录——兼乱弹中国古代思想
  18. Centos 5.4下的编译安装 xmms 和 mplayer
  19. Java基础进阶网络编程概述
  20. 【Data Governance】数据治理不是对‘数据’的治理,而是对‘数据资产’的治理

热门文章

  1. Linux - chmod
  2. Linux 各文件系统配置
  3. 微服务之迷思--转几位大牛的文章
  4. ThinkPHP 模板循环语法
  5. 正负值地处理以及添加回调函数小案例
  6. BZOJ 2342: 【SHOI2011】 双倍回文
  7. requireJS对文件合并与压缩(二)
  8. Delphi10 安装Graphics32
  9. Mac下的Mysql无法登陆的问题
  10. 用JavaScript实现100以内自然数求和