execve()做什么?

execve()究竟做了什么? 我已经试过看文档(http://linux.die.net/man/2/execve),但鉴于我是非常新的Linux和这种编程没有多大意义。 我想要做的是能够执行这个命令:

nc -l -p someport -e /bin/sh 

我可以做类似以下的事情吗(其中someport是一个数字,如4444)

 char *command[2]; command[0] = "nc -l -p someport -e /bin/sh" execve(command[0], name, NULL); 

正确的用法是

 extern char * const environ[]; char * const command[] = {"nc", "-l", "-p", "porthere", "-e", "/bin/sh", NULL}; execve("/usr/bin/nc", command, environ); 

您必须使用完整的路径名,而不是像"nc"这样的短名称(更确切地说,没有PATH搜索完成,路径名必须是实际存在的文件),并且必须事先将参数拆分成单独的字符串。 你还需要以某种方式传播环境,或者通过上面代码片段中提到的extern environ或者从main()的第三个参数获得; 后者稍微更加标准化,但可能会更加痛苦。

execve用新进程替换当前进程,运行您指定的命令作为其第一个参数。

你想要execvpexeclp机会是相当不错的 – 你没有提到任何想要为孩子提供环境的东西,但从外观上看,你可能希望路径搜索找到你正在使用的可执行文件。