C/ c++标准库中的缓冲
Buffering in standard library in C/C++
我有一个关于I/O标准库缓冲的问题:我读了《Linux编程接口》第13章关于文件I/O缓冲,作者提到标准库使用磁盘文件和终端的I/O缓冲。我的问题是,这个I/O缓冲也适用于FIFO,管道,套接字和网络文件?
可以,如果您使用的是基于FILE *
的标准I/O库。唯一可能发生的奇怪情况是,底层系统文件描述符返回isatty
函数的非零值。然后工作室可以"行缓冲"输入和输出。这意味着当它看到'n'
时,它倾向于冲洗。
我认为如果文件描述符1为isatty
返回非零,则需要行缓冲stdout
。
No。任何普通的文件描述符(比如由open(2)
、pipe(2)
、socket(2)
和accept(2)
返回的文件描述符)都不会被缓冲——读取或写入的任何数据都是通过直接系统调用立即输入或输出的。
缓冲只发生在你有FILE*
对象的时候,你可以通过fopen(3)
来获得一个普通的磁盘文件;对象stdin
、stdout
和stderr
也是在程序启动时设置的FILE*
对象。缓冲通常在FILE*
对象上启用,但并不总是启用——它可以在setbuf(3)
中禁用,并且stderr
默认情况下是不缓存的。
如果你想从一个普通的文件描述符中创建一个缓冲流,你可以使用fdopen(3)
。
相关文章:
- 使用CMake检测支持的C++标准
- 如何理解C++标准N3337中的expr.const.cast子句8
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 编译标准库类型
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 如何使用原子指针执行双缓冲
- 铸造标准::有没有回到原来的类型
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 标准库类型的赋值运算符的引用限定符
- 标准是否严格定义了该程序应该如何编译?
- 如何从Windows应用程序输出到标准?
- 安全到标准:移动会员?
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 这是否符合C++标准:双响双响,例如!!(-0.0).
- C++确保绝对没有标准输入缓冲
- 如何缓冲标准::iostream
- 提振.进程:捕获的标准输出被缓冲到大小为X
- C/ c++标准库中的缓冲