Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 即使终端关闭,如何读取标准数据文件号?_Linux - Fatal编程技术网

Linux 即使终端关闭,如何读取标准数据文件号?

Linux 即使终端关闭,如何读取标准数据文件号?,linux,Linux,我试图在Linux中编写一个程序来读取键盘上的每个输入,但使用STDIN\u FILENO它只读取在终端中输入的内容。我想要的是,在执行过程中,即使终端关闭,它也应该读取键盘。STDIN\u FILENO只是一个辅助宏 从stdin你接收到的字节流被传递到你的程序中,它们不一定来自终端,也可以来自文件,等等。它不是捕获键盘。终端捕获键盘,然后将输入的数据传递给程序的标准输入 为了捕获键盘,您需要其他一些接收事件的方法。我猜您正在运行GUI aka X服务器;通常,应用程序创建窗口并接收与其相关的

我试图在Linux中编写一个程序来读取键盘上的每个输入,但使用
STDIN\u FILENO
它只读取在终端中输入的内容。我想要的是,在执行过程中,即使终端关闭,它也应该读取键盘。

STDIN\u FILENO
只是一个辅助宏

从stdin你接收到的字节流被传递到你的程序中,它们不一定来自终端,也可以来自文件,等等。它不是捕获键盘。终端捕获键盘,然后将输入的数据传递给程序的标准输入


为了捕获键盘,您需要其他一些接收事件的方法。我猜您正在运行GUI aka X服务器;通常,应用程序创建窗口并接收与其相关的事件。为了捕获所有键盘事件,您必须进行更低级的操作。请看一下
xlib
,它对您来说应该足够了,即使可能不够。

您的意思是像键盘记录器一样?您需要连接到键盘驱动程序和/或调度程序(至少在Windows上是这样做的,我想在Linux上也是这样)。通常应用程序只捕获指向自己窗口或终端的击键。您是说在一个窗口中启动的进程能够读取所有窗口中的所有键盘笔划吗?要做到这一点并不容易——您必须在X11系统中找到一个合适的点才能做到这一点。实际上,系统会竭尽全力确保窗口1中的进程无法读取发送到窗口2的字符。现在还不清楚当终端关闭时,从标准输入(STDIN_FILENO)读取数据意味着什么。也许我误解了你的意图。请解释一下。