setbuf, setbuffer, setlinebuf, setvbuf - 流缓冲操作
SYNOPSIS 总览
#include <stdio.h>
void setbuf(FILE *stream, char *buf);
void setbuffer(FILE *stream, char *buf,
size_t size);
void setlinebuf(FILE
*stream);
int setvbuf(FILE *stream, char
*buf, int mode , size_t size);
DESCRIPTION
描述
有三种类型的缓冲策略,它们是无缓冲,块缓冲和行缓冲。当输出流无缓冲时,信息在写的同时出现于目标文件或终端上;当是块缓冲时,字符被暂存,然后一起写入;当是行缓冲时,字符被暂存,直到要输出一个新行符,或者从任何与终端设备连接的流中
(典型的是 stdin) 读取输入时才输出。函数 fflush(3) 可以用来强制提前输出。(参见
fclose(3)) 通常所有文件都是块缓冲的。当文件 I/O 操作在文件上发生时,将调用 malloc(3)
,获得一个缓冲。如果流指向一个终端 (通常 stdout 都是这样),那么它是行缓冲的。标准错误流 stderr 默认总是无缓冲的。
函数 setvbuf 可以用在任何打开的流上,改变它的缓冲。参数 mode 必须是下列三个宏之一:
-
- _IONBF
- 无缓冲
- _IOLBF
- 行缓冲
- _IOFBF
- 完全缓冲
除非是无缓冲的文件,否则参数 buf 应当指向一个长度至少为 size 字节的缓冲;这个缓冲将取代当前的缓冲。如果参数
buf 是 NULL ,只有这个模式会受到影响;下次 read 或 write 操作还将分配一个新的缓冲。函数
setvbuf 只能在打开一个流,还未对它进行任何其他操作之前使用。
其他三个函数调用是函数 setvbuf 的别名,函数 setbuf 与使用下列语句完全等价:
- setvbuf(stream, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
函数 setbuffer 与此相同,但是缓冲的长度由用户决定,而不是由默认值 BUFSIZ 决定。函数
setlinebuf 与使用下列语句完全等价:
- setvbuf(stream, (char *)NULL, _IOLBF, 0);
RETURN VALUE 返回值
函数 setvbuf 成功执行时返回 0。它失败时可能返回任何值,但是当 It can
return any value on failure, but returns nonzero when mode
不正确,或者不能实现请求时,必须返回非零值。它在失败时可能设置 errno 。其他函数没有返回值。
CONFORMING TO 标准参考
函数 setbuf 和 setvbuf 遵循 ANSI X3.159-1989
(``ANSI C'') 标准。
BUGS
函数 setbuffer 和 setlinebuf 无法移植到 4.2BSD 之前的 BSD 版本,在
Linux 中仅在 libc 4.5.21 之后的系统中可用。在 4.2BSD 和 4.3BSD 系统中, setbuf
总是使用非最优的缓冲大小,应当避免使用它。 在 stream 被关闭时,必须确保 buf
和它指向的空间仍然存在。这通常发生在程序终止时。 例如,下列调用是非法的:
#include <stdio.h>
int main()
{
char buf[BUFSIZ];
setbuf(stdin, buf);
printf("Hello, world!\n");
return 0;
}
setbuf, setbuffer, setlinebuf, setvbuf - 流缓冲操作的更多相关文章
- -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- C语言 流缓冲
**From : https://www.gnu.org/software/libc/manual/html_node/Stream-Buffering.html** 12.20 流缓冲 通常情况下, ...
- C语言 流缓冲 Stream Buffering
From : https://www.gnu.org/software/libc/manual/html_node/Stream-Buffering.html 译者:李秋豪 12.20 流缓冲 通常情 ...
- Java基础知识强化之IO流笔记38:字符流缓冲流之BufferedWriter / BufferedReader使用
1. 字符流缓冲流: 字符流为了高效读写,也提供了对应的字符缓冲流. BufferedWriter:字符缓冲输出流 BufferedReader:字符缓冲输入流 2. BufferedWriter使用 ...
- IO流的操作规律
输入流和输出流相对于内存设备而言. 将外设中的数据读取到内存中:输入将内存的数写入到外设中:输出. 字符流的由来:其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表.获取对应的文字.在 ...
- IO流(字节流,字符流,缓冲流)
一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流 这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图: 二:字符字节 ...
- Java第三阶段学习(五、流的操作规律、Properties流、序列化流与反序列化流、打印流、commons-IO jar包)
一.流的操作规律 四个明确: 明确一:明确要操作的数据是数据源还是数据目的地 源:InputStream Reader 目的地:OutputStream Writer 先根据需求明确是要读还是写 ...
- IO流常规操作
IO流 IO就是输入输出,IO设备在计算机中起着举足轻重的作用,IO流也就是输入输出流,用来交互数据,程序和程序交互,程序也可以和网络等媒介交互. 一.IO流的分类 要分类,肯定得站得不同角度来看这个 ...
- IO流(四)__流的操作规律总结
流的操作规律: 1.明确源和目的 源:InputStream Reader 目的:OutputStream Writer 2.明确数据是否是纯文本数据 源:是纯文本:Reader 否:InputStr ...
随机推荐
- shell 函数传递参数的几种方式
1.最近总结了 shell 中 function 的传递变量的几种方式 1.传递单个变量 2.传递数组变量 #!/bin/bash #trying to pass an variable. ...
- mongodb 稀疏索引
稀疏索引(或者称间隙索引)就是只包含有索引字段的文档的条目,即使索引字段包含一个空值.也就是说间隙索引可以跳过那些索引键不存在的文档.因为他并非包含所有的文档,因此称为稀疏索引.与之相对的非稀疏索引或 ...
- centos 6.5 切换用户
root --> user,无需密码 su username user --> root,需要 root 密码 su root root 可省略
- Ubuntu12.04安装配置vncserver
安装 sudo apt-get install vnc4server 修改配置文件 sudo vim ~/.vnc/xstartup #!/bin/sh # Uncomment the followi ...
- JavaWeb(六):会话与状态管理
HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的.即使 HTTP1.1 支持持续连接,但当用户有一段时间没有提交请求,连接也会 ...
- ROS基础学习总结
最近一周因为工程需要,把ROS的一些基础学习了一下,现在做一下总结. 学习资源: #创客智造整理的wiki上的ROS入门教程(中文)https://www.ncnynl.com/category/ro ...
- 使用idea搭建Spring boot+jsp的简单web项目
大家好: 这是我的第一篇博客文章,简单介绍一下Spring boot + jsp 的搭建流程,希望给跟我一样新接触Spring boot的读者一点儿启发. 开发工具:jdk1.8 idea2017 ...
- boost range
1.Algorithms Boost.Range is library that, on the first sight, provides algorithms similar to those p ...
- 别人的双11 & 程序员的双11~
双11,致敬所有的程序员欧巴! 愿代码的世界,只有爱,没有伤害!! 点此参加阿里云双十一拼团活动:https://m.aliyun.com/act/team1111/ 阅读原文
- spring-cloud:eureka server单机、双机、集群示例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springCl ...