如何使用C程序在命令propmt上传递命令?

如何使用C程序在命令propmt上传递命令?,c,linux,command-prompt,C,Linux,Command Prompt,我想从我的C程序中传递一些命令,下面是示例程序: #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(){ FILE *ssh = popen("ssh user@192.168.170.155", "w"); pid_t pid; pid = fork(); if(!ssh) { fprintf(stderr,

我想从我的C程序中传递一些命令,下面是示例程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(){

    FILE *ssh = popen("ssh user@192.168.170.155", "w");

    pid_t pid;
    pid = fork();


    if(!ssh)
    {
        fprintf(stderr, "Could not open pipe for output.\n");
    } 

    if (pid==0){

        fprintf(stdout, "Child process properly created.\n");
        fputs("user", ssh); 
        fputc('\n', ssh);   // enter key 
         _exit(0);
    }


    fprintf(stdout, "Exit from child process.\n");
    pclose(ssh); 

    return 0 ;

}
我想从示例程序传递密码,而不是从命令提示符传递密码。 谁能告诉我如何用C语言编程实现这一点

SSH仅用于示例。它也可以用于其他场景

谢谢,
Yuvi

这是可能的,但需要更多的代码。首先,您需要使用
fork()
而不是
system()
加上一个
exec*()
调用来用您想要运行的命令替换子进程


有关详细信息,请在此处询问或查看,具体而言,

我认为
ssh
命令从其
stdin
读取密码,在这种情况下,您需要将密码导入程序,为此,您可以使用。C99/POSIX示例:

#include <stdio.h>

int main()
{
    FILE *ssh = popen("ssh user@host", "w");

    fputs("p4ssw0rd", ssh);
    fputc('\n', ssh); // enter key

    pclose(ssh);
}
#包括
int main()
{
FILE*ssh=popen(“sshuser@host“,“w”);
fputs(“p4ssw0rd”,ssh);
fputc('\n',ssh);//输入密钥
pclose(ssh);
}

未经测试。使用
fork
/
exec
/
dup
等组合,您可能会有更好的运气。

使用ssh时,设置ssh密钥非常简单,因此不必添加密码。但是,如果您真的想这样做,那么使用名为expect的api非常容易。我自己也用过,效果很好

如果您的问题是关于
ssh
接口的,我建议您在superuser.com.No中询问它与ssshNo无关,也就是说,它不仅仅与ssh有关,我仅以ssh为例。在很多情况下,当您使用系统函数启动任何命令时,它会要求一些参数。他还想“输入密码”(我想),因此这也需要一些文件描述符。我已经更新了代码,但仍然不走运。因为你可以解释更多如何实现它,我不懂C编程。我还尝试了所有的组合
fork/exec/dup
的排列,这是我遵循的引用链接,但仍然无法实现。@Yuvi:你不需要fork。如果您在我的回答中运行上面的代码而不使用分叉,会发生什么?它要求输入密码就像简单的
system()
调用一样。@Yuvi:好的,我发现SSH检测它的
stdin
是连接到终端还是从管道连接的,如果它连接到管道,它就不会从中读取任何数据。如果替换
sshuser@host
只需使用
cat
,您就会看到文本通过管道传输到
cat
命令中,
cat
会将文本回显到终端(或者更确切地说,回显到其
stdout
)。不幸的是,SSH不能像这样编写脚本,这可以通过使用shell内置来证明,例如
echo“password”| SSHuser@host
也不起作用,它仍然要求输入密码。请编辑您的答案以添加有关您提到的api的信息,好吗?
#include <stdio.h>

int main()
{
    FILE *ssh = popen("ssh user@host", "w");

    fputs("p4ssw0rd", ssh);
    fputc('\n', ssh); // enter key

    pclose(ssh);
}