C中的缓冲和非缓冲输入

 婕小米 发布于 2023-02-13 12:20

有没有办法弄清楚inputbufferedunbuffered(除了手册页.)?我们不能通过查看函数的名称来弄清楚吗?也为echoingnonechoing... 对于快速参考在哪里可以找到它具有细节的清单Buffered,Unbuffered,echoingnonechoing投入?

1 个回答
  • 所有 stdio.h用于从读取功能FILE可以表现出任何 "缓冲"或"非缓冲"的行为,和任一 "呼应"或"非呼应"的行为.控制这些内容的不是您使用的功能,而是流和/或其底层文件描述符上的设置.

    标准库函数setvbuf可用于启用或禁用C库对输入(和输出)的缓冲.这对操作系统的缓冲没有影响.有三种可能的模式:"完全缓冲"(以大量块读取或写入); "line buffered"(缓冲区直到'\n'读取或写入字符,但不超过该字符); 和"无缓冲"(所有读写操作立即进入操作系统).

    FILE对象(包括stdin和朋友)的默认缓冲是实现定义的.Unixy C库通常将所有FILEs 默认为完全缓冲,但有两个例外.stderr默认为无缓冲.对于任何其他FILE,如果setvbuf在第一次实际读取或写入时尚未使用它,并且isatty对于基础文件描述符为真,则FILE变为行缓冲.

    一些C库提供扩展功能,例如__flbfLinux和Solaris上的朋友,用于读回受控制的一些设置setvbuf.请记住,如上所述,如果尚未明确设置缓冲模式,则可以在第一次实际读取或写入时进行更改.

    如果输入来自文件,setvbuf则是您拥有的唯一旋钮.如果输入来自某种通信渠道,则可能还有其他旋钮:

    在符合POSIX标准的系统上(读取"Windows以外的所有内容"),程序可以请求终端输入的几种不同模式中的任何一种.其中,最重要的区别在于"规范"和"非规范".规范模式的终端表现出缓冲和回声.(此缓冲与C库可能执行的缓冲是分开的,如果setvbuf尚未用于禁用它.)非规范模式允许您单独切换缓冲和回显.在低级别的POSIX终端接口是广泛的,复杂的,并允许您读取和写入所有这些设置.

    如果您认为要将终端设置为非规范模式,那么在针对低级别POSIX API编写一堆代码之前,您应首先考虑该库readlinencurses库是否会让您的生活更轻松.

    如果你正在读一根烟斗,那么无论是谁写的,你都会受到怜悯; 你无法控制你得到的块的大小.

    如果你正在阅读套接字,你可以通过小心使用来控制你获得的块的大小recvmsg,但是没有保证.

    我不知道它在Windows上是怎么回事.

    2023-02-13 12:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有