一个用户进程通过三个文件描述符与终端通信。在Unix中,终端被视为文件(例如
假设用户进程正在等待输入(例如:
此外,如果重定向输出,例如
/dev/tty
),并且还具有文件描述符、主要号码和次要号码以供内核识别。因此,内核通过终端与用户进程通信。另一种通信方式是通过我们都知道的系统调用。假设用户进程正在等待输入(例如:
请输入两个数字:_ _
)。当我们在键盘上按下1和2时,键盘缓冲区被填充,与键盘相关的设备驱动程序将识别它,并唤醒其等待队列中的进程。那么这些数据(即1
和2
)如何提供给用户进程呢?我猜是通过终端。此外,如果重定向输出,例如
$ ./a.out > file
会发生什么?我使用了isatty()
来检查该进程是否与任何终端相关联。那么内核如何与用户进程交互呢?假设我的程序需要从键盘获取一些输入。