C语言,有没有办法将命令发送到popen()打开的shell

c language, is there any way how to send a command into popen() opened shell

提问人: 提问时间:8/9/2023 更新时间:8/9/2023 访问量:56

问:

我想将命令发送到 C 中打开的 popen() 函数 尝试使用 fputs(),但它不起作用。你知道其他方法吗?例如,FILE *pw = popen(“sudo apt-get ...”, “w”) 希望用户从键盘输入密码,如何从字符串 char *sudopass = “password” 输入密码。 多谢!

我想从字符串而不是键盘输入进行自动输入。我在 FILE *pw = popen(sudo apt-get ...“, ”w“) 之后尝试了 fputs(),但什么也没发生。我希望你能帮上一点忙

法典:

#include <stdio.h>
        int main()
    {
       FILE *pw = popen(“sudo apt-get …, “w”);
       fputs(“password”, pw);
    }
C Linux 输入 sh popen

评论

0赞 dimich 8/9/2023
身份验证通过 PAM 工作,密码输入需要 TTY。无法使用连接到管道的 stdin 进行身份验证。
1赞 Bodo 8/9/2023
编辑您的问题并复制并粘贴您的代码,作为最小可重现的示例。添加“它不起作用”的详细信息。你收到错误代码吗?错误信息?意想不到的结果?顺便说一句:可能并不总是要求输入密码,与其将密码存储在某个地方,不如配置为允许某些没有密码的命令。sudosudo
1赞 Bodo 8/9/2023
由于引号错误,代码可能无法编译。正如 dimich 的评论中已经写的那样,它会更加复杂。这看起来像一个 XY 问题。请解释您希望通过您的计划实现什么。
2赞 Bodo 8/9/2023
@verifylion 您应该通过编辑问题来添加所有要求的信息或澄清。请勿将评论用于此目的。 并且有意设计为从终端读取密码而不是 ,因此这可能不适合学习 C。您可以使用将输入馈送到从 stdin 读取数据的“普通”程序。 仅允许输入或输出,并且它会启动一个 shell 来解释您的命令字符串,这在某些情况下可能会有问题。为了获得更大的灵活性,最好使用 和 。sudosshstdinpopenpopenpipeforkexec*
1赞 Diego Torres Milano 8/9/2023
linux.die.net/man/1/expect 做的事

答: 暂无答案