在TTY中禁用行缓冲,但保持Ctrl + D启用

时间:2018-12-19 04:44:34

标签: linux tty

默认情况下,TTY处于规范模式,这意味着它会缓冲接收到的数据,直到它获得行尾或文件尾(默认为Ctrl + D)。但是,缓冲区的大小仅为4096字节,因此,如果我通过TTY向进程发送大量数据,则必须写入<4096字节以下的块,然后按Ctrl + D。这会使我的程序变慢。

我可以通过将TTY设置为原始模式来禁用行缓冲,但是在原始模式下,它不再响应文件结束,而是直接将Ctrl + D发送到远程进程,该进程将其与其他进程一样对待字节。因此,我无法向进程表明数据流已经结束。

我知道TTY有一个设置,即使在原始模式下,它也会响应中断字符(Ctrl + C)。这不合适,因为如果我发送Ctrl + C,则远程进程可能会得到SIGINT并在处理之前的所有数据之前死亡。

我真正想要的是让TTY不缓冲数据,而是直接将其发送到进程,一旦我发送Ctrl + D,我希望它发送EOF到进程。我该如何实现?

0 个答案:

没有答案