read(2) 在哪里检查 termios 结构以确定它应该以(非)阻塞的方式读取 STDIN?

问题描述 投票:0回答:1

我搜索过:

  • 标准库(我认为答案不存在,因为 libc_hidden_def 有一个死胡同,这显然是连接到内核的东西)
  • xfce4-终端源代码
  • Linux 内核

仍然无法找到解释 read(2) 如何知道必须阻塞或不阻塞的答案。是的,read(2)不是包含答案的函数,但它是起点。

这里我画一下问题的时间线:

  1. tcsetattr(设置 VMIN 和 VTIME 以获取原始模式或其他组合)
  2. 读取(尝试从STDIN读取)
  3. ???
  4. 某处的某个东西检查我们设置的 termios 结构,并决定是否继续轮询 STDIN 直到换行符到来,直到 x 个字符在里面,直到 x 时间过去,或者总是返回任何(不在)里面的内容
  5. 我们得到read()的结果
c linux-kernel
1个回答
0
投票

看起来像在这里https://elixir.bootlin.com/linux/latest/source/drivers/tty/n_tty.c#L2212

      timeout = (HZ / 10) * TIME_CHAR(tty);
...
                    timeout = wait_woken(&wait, TASK_INTERRUPTIBLE,
                        timeout);
© www.soinside.com 2019 - 2024. All rights reserved.