为什么C不启动新的shell?
我有一小块 C 代码。
#include<stdio.h>
int main()
{
char *name[2];
name[0] = '/bin/sh';
name[1] = NULL;
execve(name[0], name, NULL);
}
我有一个符号链接 sh ->嘘。当我运行该程序时,没有任何反应,并且我停留在同一个 shell 中。我知道我不在新的外壳中,因为当我在终端退出后退出时。如果我运行 /bin/sh
我会得到另一个 shell。我的代码是错误的还是某种类型的安全措施不允许我这样做?
I have a small chunk of C code.
#include<stdio.h>
int main()
{
char *name[2];
name[0] = '/bin/sh';
name[1] = NULL;
execve(name[0], name, NULL);
}
I have a symlink sh -> zsh. When I run the program nothing happens and I stay in the same shell. I know I am not in a new shell since when i exit once the terminal exits. If i run /bin/sh
I get another shell. Is my code wrong or is this some type of security measure not allowing me to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
编译这个带有警告的代码会立即显示出了什么问题:
当然这个程序不起作用。您想要的字符串文字是
"/bin/sh"
(您在C
中使用的引号很重要)。Compiling this with warnings immediately shows what's wrong:
Of course this program doesn't work. A string literal you want is
"/bin/sh"
(the kind of quotes you use matters inC
).