我正在尝试为Linux版本的windscribe创建一个GUI,因此我希望通过我的C程序与windscribe CLI进行通信。我选择使用popen。
我可以使用popen(“ command”,“ w”)编写单个命令,但是我想在询问时添加信息,例如在CLI中登录:
10
因此,我保持FILE为打开状态,并使用fput继续发送信息。 我终于写了这个函数:
$ windscribe login
Windscribe Username: myname
Windscribe Password: mypassword
但是当我使用此功能(例如)进行登录时,它的行为不符合我的预期,似乎其他命令丢失了,没有考虑在内。
void write_in_shell_commands(char** commands, int length){
FILE *fp = NULL;
// sending first command
if (length > 0) {
debug("Writing \"%s\" to shell.", commands[0]);
fp = popen(commands[0], "w");
}
// sending the rest
if (fp) {
debug("File successfully opened.");
for (int i = 1; i < length; i++){
debug("%s", "Writing to shell.");
fputs(commands[i], fp);
}
pclose(fp);
} else {
debug("Operation failed.");
}
}
我希望程序执行以下操作:
但这实际上发生了
char* cmd1 = "windscribe login";
char* cmd2 = "myname";
char* cmd3 = "mypassword";
char** commands = malloc(3 * sizeof(char*));
commands[0] = cmd1;
commands[1] = cmd2;
commands[2] = cmd3;
write_in_shell_commands(commands, 3);
实际上是在终端中要求输入密码,最终由于凭据错误而失败。
这里实际上发生了什么?我的第二和第三条命令在哪里?我使用了错误的功能吗?
答案 0 :(得分:0)
cmd1, cmd2, cmd3
是指向char的指针。因此,您应该为char
的3个指向commands
的指针分配内存,这是一个指向char的指针。
char** commands = malloc(3*sizeof(char*));