【问题标题】:sending input from file descriptor从文件描述符发送输入
【发布时间】:2020-05-03 00:42:28
【问题描述】:

我有一个正在远程调试的二进制文件,我向该文件发送输入的一种方法是 throw

echo "input" > /proc/pid/fd/0

当我执行上述操作时,二进制文件接收到输入,但我无法模拟按键,这导致我切换到该二进制文件并每次都按 Enter。

这是一个例子

#include <stdio.h>

int main () {
   char str[50];

   printf("Enter a string : ");
   gets(str);

   printf("You entered: %s", str);

   return(0);
}

当您运行上述程序并使用发送输入时

echo "input" > /proc/pid/fd/0

上面的程序会接收输入但不会按回车键

那么有没有办法使用二进制文件的文件描述符或任何快速的方法来做到这一点?

在我的情况下,keypress 只是输入键

编辑:

echo -en 'input\r' > /proc/pid/fd/0

或

echo -en 'input\x0d' > /proc/pid/fd/0

不会工作,因为终端会认为它是从机发送到输出它不会被发送到从机的标准输入

【问题讨论】:

标签: c linux file-descriptor


【解决方案1】:

您能否让您的进程从命名管道 (mkfifo) 中读取?然后可以使用cat &gt; mypipe 进行键盘输入,但是当cat 正在运行时,您也可以echo foo &gt; mypipe,因为一个管道可以有多个写入器(我认为。)

否则,您将需要像 expect 这样的东西将您的程序连接到伪终端,而另一个程序管理主端。


echo "input" &gt; /proc/pid/fd/0上面的程序会接收输入

不,输出将完全显示在终端中,就像您执行 echo "input" &gt; /dev/pts/12 或进程打开的任何终端设备一样(通常对于所有 3 个标准输入、标准输出、和 stderr,这就是为什么它可以写入)。

为了使程序能够read() 您的输入,您需要写入伪终端的另一端,该伪终端可能归ssh 或终端模拟器所有。 可能可以写入ssh 或xterm 或其他任何一个FD。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多