gpt4 book ai didi

linux - 用户进程、终端和内核之间的通信

转载 作者:太空狗 更新时间:2023-10-29 11:19:04 25 4
gpt4 key购买 nike

用户进程使用 3 个文件描述符与终端通信。终端在unix中被视为文件(例如/dev/tty),也有文件描述符、major、minor号供内核识别。所以内核通过终端与用户进程通信。另一种通信方式是通过我们都知道的系统调用。

假设用户进程正在等待输入(例如:输入两个数字:_ _)。当我们在键盘上按下 12 时,键盘缓冲区被填满,与键盘关联的设备驱动程序将识别它并唤醒其等待队列中的进程。那么这些数据(即 12)是如何提供给用户进程的呢?我想它将通过终端。

另外,如果重定向输出会发生什么,例如 $ ./a.out > file?我已使用 isatty() 检查该进程未与任何终端相关联。那么内核将如何与用户进程进行交互呢?假设我的程序需要键盘输入。

最佳答案

当您的程序调用输入函数时,例如:

nread = read(FILENO_STDIN, buffer, sizeof(buffer));

内核中进行了“系统调用”。这个内核例程确保您传递给它的缓冲区在您程序的地址空间中,然后将字符(不超过您传入的大小)从终端设备的内核缓冲区复制到您提供的缓冲区中并返回给您的计数那些。

如果文件描述符 (arg 1) 指向一个打开的文件,则会发生非常相似的事情——数据来自文件系统的内核缓冲区(可能需要先将其从实际设备复制到那里)。

关于linux - 用户进程、终端和内核之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25813235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com