从文件描述符发送输入

sending input from file descriptor

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

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

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

这里有一个例子

#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

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

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

在我的例子中,按键只是回车键

编辑:

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

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

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

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

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


echo "input" > /proc/pid/fd/0 the above program will receive the input

不,输出将完全显示在终端中,就好像您所做的那样 echo "input" > /dev/pts/12 或该进程作为其标准输入打开的任何终端设备(通常具有相同的 read/write 文件描述符stdin、stdout 和 stderr 中的 3 个,这就是写入它的原因。

为了程序能够 read() 您的输入,您需要写入伪终端的另一端,它可能属于 ssh 或终端仿真器. 可能可以写入sshxterm或其他任何一个FD。