Linux控制台应用用户输入按下回车前的存储位置及缓冲区长度咨询
终端未回车输入存储问题解答
1. 输入内容存储层级
你描述的是终端默认*规范模式(行缓冲模式)*下的标准输入流程,未按下回车键的输入内容,最终存储在Linux内核的tty子系统线路规程缓冲区中,各层级的角色如下:
- 键盘驱动仅负责将硬件输入的扫描码转换为字符事件上报,不会缓存整行未提交的输入
- libc层的
gets、scanf等读取函数此时已经触发read系统调用陷入内核,处于阻塞等待状态,用户态的libc缓冲区还未拿到任何输入数据 - 如果使用的是用户空间的终端模拟器(如xterm、GNOME Terminal等),部分实现会在用户空间临时缓存输入内容用于处理回显、退格等交互操作,最终还是会将输入内容提交给内核tty缓冲区,只有内核中的这份缓存会被
read系统调用读取返回给应用程序
2. 缓冲区长度说明
缓冲区的大小由操作系统实现决定:
- POSIX标准规定规范模式下最大输入行长度的最小值为255字节,对应标准常量为
MAX_CANON - Linux系统默认的tty线路规程缓冲区长度为4096字节,对应内核常量为
N_TTY_BUF_SIZE - 你可以通过
termios系统调用或者stty命令行工具修改终端配置,调整缓冲区的限制大小
内容的提问来源于stack exchange,提问作者Pablo Antonio Soprano
相关产品推荐
相关产品推荐

