就是我想问一下system命令调用shell咱们做到
答案:2 悬赏:40 手机版
解决时间 2021-03-08 13:39
- 提问者网友:人生佛魔见
- 2021-03-08 04:21
就是我想问一下system命令调用shell咱们做到
最佳答案
- 五星知识达人网友:夜余生
- 2021-03-08 05:09
system调用shell命令
直接使用就可以啊
这个在Linux编程中很常见的,虽然总被高手们鄙视
比如
system("rm tmp/* -rf");
就可以直接删掉tmp下面所有了
直接使用就可以啊
这个在Linux编程中很常见的,虽然总被高手们鄙视
比如
system("rm tmp/* -rf");
就可以直接删掉tmp下面所有了
全部回答
- 1楼网友:青尢
- 2021-03-08 05:49
使用fork加pipe就加以了,
首先创建一个管道
int fd[2];
pipe(fd); //创建一个管道,fd[0] 是读取端,fd[1]是写入端
然后fork
int pid=0;
pid=fork();
if( pid < 0 )
{
}
else if( pid == 0 )
{
dup2( fd[1], 1 );
sleep(1); //暂停一秒再输密码,防止你的system还没运行到输密码的地方就输出了,那system调用的命令就收不到了
printf("你的密码\n");
fflush(stdout); //刷新缓冲区,这样printf才能马上生效
//要是有其他的东西要输出也可以继续printf
return(0);//子进程要做的事做完了直接退出就行了
}
else //父进程
{
//这里面就是你原来的处理,但是要改一下,把system调用的命令的标准输入重定向到fd[0],这样子进程往fd[1]里写入密码,由于system是从标准输入读取你的输入的,重定向到fd[0]就能读取子进程写到fd[1]里的密码了
dup2( fd[0], 0 ); //把标准输入重定到fd[0]
system(".....");
//也可以不使用dup2来重定向,可以直接在system命令里重定向
// 如 sprintf(cmd,"你要调的命令 <&%d", fd[0]);
// system(cmd);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯