首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何响应`system`启动程序的提示?

如何响应`system`启动程序的提示?
EN

Stack Overflow用户
提问于 2013-07-13 19:42:14
回答 2查看 158关注 0票数 0

我知道如何将参数传递给system,例如:

代码语言:javascript
运行
复制
char words[]="abcde";
sprintf(str, "echo %s",words);
system(str);

我写了一个简单的代码来破解一个rar文件。

但是当提示出现时,我不知道如何将密码传递给system

我尝试下面的代码

代码语言:javascript
运行
复制
char pw[512];
for(int i=0;i<26;i++){
    char ch=i+'a';

    memset(pw, '\0', sizeof(512));
    system("unrar x filename");// prorgam will wait at this point for a password
    sprintf(pw, "%c",ch);   
    system(pw); //this line doesn't make sense....
}

当程序等待输入时,我如何将数据传递给system

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-13 19:45:33

Unrar允许您将密码作为命令行的一部分提供:

代码语言:javascript
运行
复制
for (char ch = 'a'; ch <= 'z'; ++ch) {
    char cmdline[512];
    sprintf(cmdline, "unrar -p%c x filename", ch);
    system(cmdline);
}
票数 3
EN

Stack Overflow用户

发布于 2013-07-13 19:54:53

如果您想要直接与指定的命令交互,则不能使用system(),因为它在system()描述中指出,system()在指定的命令完成之前不会返回:http://www.tutorialspoint.com/c_standard_library/c_function_system.htm

正如Marcelo所指出的,如果您想要发送数据的程序接受命令行参数,只需在您传递给system()的命令行上指定数据即可。如果您要调用的程序在标准输入上获取数据,另一种方法是将数据保存到一个临时文件,然后在命令行上指定标准输入重定向,然后在system()返回后删除您的文件:

代码语言:javascript
运行
复制
char *inputFileName = mkstemp("/tmp/myinputXXXXXX");
// store data in inputFileName
char buf[128];
sprintf(buf, "/path/to/myprogram < %s", inputFileName);
system(buf);
unlink(inputFileName);

如果需要与运行的程序进行交互,则需要使用另一组库函数来启动进程,并在它们之间设置IPC机制。std库有一个类似于system()的函数,它允许您执行以下操作:popen()popen()允许您指定类似于system()的命令行,但它创建了一个指向所创建程序的管道并返回一个文件*,该文件允许您的调用程序从子进程读取数据、向子进程写入数据或同时向子进程写入数据:

代码语言:javascript
运行
复制
FILE *myprogFP = popen("/path/to/myprog", "rw");
fprintf(myprogFP, "%d\n", i);
pclose(myprogFP);

有关处理这些函数的错误返回的更多信息和示例,请参见示例:http://www.gnu.org/software/libc/manual/html_node/Pipe-to-a-Subprocess.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17629846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档