tty读写之内核实作 (你想知道的C语言 1.3.1)

    技术2025-09-24  62

    Q: console和tty是什么关系?

    A: 为了避免名词混乱,我们先默认为,console被当做是物理终端或者单用户模式的终端, tty我们一般叫做虚拟终端,一般是GUI终端内部模拟的终端. console的读写更简洁, TTY和console的流程类似, 不过最终会交给GUI应用程序负责回显.

         我们以console为例.

     

    Q:  对console的写操作,内部流程是什么?

    A: 调用堆栈如下:

    con_write会把write系统调用的buffer送到指定的console缓冲区中,并调用con_putcs把数据输出到显示器.

     

    Q: 对console的读操作,执行流程是什么?

    A: 调用堆栈如下:

     

    n_tty_read会调用add_wait_queue把当前线程至于阻塞状态,并等待输入的数据.

     

    Q: 何时会唤醒read_wait等待队列呢?

    A:   当按键被按下,键盘终端处理程序会调用tty_insert_flip_char把当前输入的按键信息传递给当前的console, 继而调用到tty接收buffer处理函数n_tty_receive_buf或n_tty_receive_buf2, 最后调用相应的唤醒函数.

     比如:

      n_tty_receive_char_special 输入换行符:

         

      __receive_buf  当输入读到的数据超过TTY设置的最大数据唤醒长度, 也会唤醒read:

        

     

    作者: 陈曦 环境: MacOS 10.14.5 Apple LLVM version 10.0.1 (clang-1001.0.46.4) Target: x86_64-apple-darwin18.6.0 Linux 3.16.83 转载请注明出处
    Processed: 0.015, SQL: 9