c - 跟踪 C 阻塞系统调用

标签 c linux

我正在尝试跟踪阻止某个进程的高级函数调用。 scanf 就是这样的一个例子,它会阻塞终端,直到它收到一个 '\n' 。现在我跟踪 scanf 到 getc(scanf 使用 getc 从 stdin 获取字符)。我的问题是,解释来自键盘的数据,一直通过内核并返回 getc 的过程是什么?另外 scanf 如何停止终端(计算机是空闲的,还是正在处理另一项任务)? 谢谢你

最佳答案

每当进程发出系统调用(例如阻塞read(2))时,进程开始以内核模式执行,即处理特定系统调用的内核代码是调用。

之后,根据底层设备和驱动程序,进程可以挂起并放入等待队列。当按下一个键时,将调用处理中断的内核代码,并从那里推断出按下了哪个键。

内核然后恢复正在等待此输入​​的进程,并通过将数据从内核地址空间复制到特定进程的地址空间来传送数据。

关于c - 跟踪 C 阻塞系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9127940/

相关文章:

mysql - Ubuntu:我无法正常运行 mysql 甚至无法重新安装它

c - POSIX 线程和信号掩码

多处理器系统上的临界区和内存栅栏/屏障

linux - 如何将 qt5 添加到我的 openembedded 构建中?

linux - 包装 python+keras+tensorflow 'as a service' 以接收来自 PHP 的预测请求?

c - 在 Linux 中使用 C 通过套接字发送 XDR 结构

linux - 如何使用awk查找基于两列的唯一值

c - 逻辑 NOT (!) 运算符不适用于按位语句

c - `l` 长度修饰符对后面的 a、A、e、E、f、F、g 或 G 转换说明符没有影响

c - 同时执行 2 个不同的函数,pthread 是我的答案吗?