从C代码向shell提供控制权?
如何从C代码执行shell 我的外壳被放置在从C代码向shell提供控制权?,c,linux,shell,C,Linux,Shell,如何从C代码执行shell 我的外壳被放置在/bin/sh 下面的内容似乎对我不起作用 system("/bin/sh"); exec("/bin/sh"); 也许您需要告诉shell它应该是交互式的: system("/bin/sh -i"); 但是,我相信您最初的system()调用也应该生成一个shell提示符 此程序中的两个符号(带和不带“-i”)都会给我一个shell提示(通过键入“exit”和return或Control-D返回到上一个shell): #包括 内部主(空) { 系
/bin/sh
下面的内容似乎对我不起作用
system("/bin/sh");
exec("/bin/sh");
也许您需要告诉shell它应该是交互式的:
system("/bin/sh -i");
但是,我相信您最初的system()
调用也应该生成一个shell提示符
此程序中的两个符号(带和不带“-i”)都会给我一个shell提示(通过键入“exit”和return或Control-D返回到上一个shell):
#包括
内部主(空)
{
系统(“/bin/sh-i”);
返回0;
}
也许您需要告诉shell它应该是交互式的:
system("/bin/sh -i");
但是,我相信您最初的system()
调用也应该生成一个shell提示符
此程序中的两个符号(带和不带“-i”)都会给我一个shell提示(通过键入“exit”和return或Control-D返回到上一个shell):
#包括
内部主(空)
{
系统(“/bin/sh-i”);
返回0;
}
这个程序对我来说工作正常:
int main()
{
int ret = system("/bin/sh");
printf ("Shell returned %d\n", ret);
return 0;
}
使用-i会导致某种重定向问题,并且在键入生成输出的命令后,所有内容都会挂起
system()和exec()之间有重要区别。system()实际上与命令行上的/bin/sh-c yourCommand
相同,因此系统(“/bin/sh”)
与
/bin/sh -c /bin/sh
这就是为什么很少使用它,因为您想要的命令是通过首先启动一个不必要的shell进程来执行的
exec()使整个进程映像被指定的命令替换,因此如果我编写了:
int main()
{
int ret = exec("/bin/sh");
printf ("Shell returned %d\n", ret);
return 0;
}
printf()及其后的所有内容都不会被执行,因为整个过程都会转换为/bin/sh的实例。运行子命令的正确方法是先在子命令中执行fork,然后在父命令中执行。此程序对我来说工作正常:
int main()
{
int ret = system("/bin/sh");
printf ("Shell returned %d\n", ret);
return 0;
}
使用-i会导致某种重定向问题,并且在键入生成输出的命令后,所有内容都会挂起
system()和exec()之间有重要区别。system()实际上与命令行上的/bin/sh-c yourCommand
相同,因此系统(“/bin/sh”)
与
/bin/sh -c /bin/sh
这就是为什么很少使用它,因为您想要的命令是通过首先启动一个不必要的shell进程来执行的
exec()使整个进程映像被指定的命令替换,因此如果我编写了:
int main()
{
int ret = exec("/bin/sh");
printf ("Shell returned %d\n", ret);
return 0;
}
printf()及其后的所有命令都不会执行,因为整个过程都会转换为/bin/sh的实例。运行子命令的正确方法是先在子命令中执行fork,然后在子命令中执行,然后在父命令中等待。不起作用吗?你能详细说明一下吗?那么,您使用了exec系列函数中的哪一个?发生了什么?更详细的情况是,当我在不使用任何命令的情况下运行我的C代码时,我的代码会进入一种等待状态(这是因为我正在使用的C应用程序的性质)。我在命令行进入等待状态之前尝试了这些命令,但是没有得到任何shell提示。没有工作吗?你能详细说明一下吗?那么,您使用了exec系列函数中的哪一个?发生了什么?更详细的情况是,当我在不使用任何命令的情况下运行我的C代码时,我的代码会进入一种等待状态(这是因为我正在使用的C应用程序的性质)。我在使其进入等待状态的行之前尝试了这些命令,但没有得到任何shell提示。