使用execvp执行命令

我有一个命令字符串数组,我想通过调用execvp()来执行:

 char* commands[] = ["ls -l", "ps -a", "ps"]; char* command = commands[0]; ... 

如何使用execvp执行命令?

这是一个可能的用法示例。 这将从命令执行命令,或者您可以取消注释硬编码示例。

我建议您在各自的手册页中查找使用过的命令。 对于execvp ,声明是

 int execvp(const char *file, char *const argv[]); 

argv[0]应该与按惯例的file相同,并且argv应该是NULL -terminated。

 #include  //exit #include  //perror #include  #include  #include  #include  int main(int argc, char** argv){ int pid, status, ret; if((pid=fork())<0) { perror("fork"); exit(EX_OSERR); } if(!pid){ //Child /* char* args[] = { "ps", "-a", (char*)0 }; execvp(args[0], args); */ //Execute arguments, already NULL terminated execvp(argv[1], argv+1); //exec doesn't exit; if it does, it's an error perror(argv[1]); //Convert exec failure to exit status, shell-style (optional) switch(errno){ case EACCES: exit(126); case ENOENT: exit(127); default: exit(1); } } //Wait on child waitpid(pid, &status, 0); //Return the same exit status as child did or convert a signal termination //to status, shell-style (optional) ret = WEXITSTATUS(status); if (!WIFEXITED(status)) { ret += 128; ret = WSTOPSIG(status); if (!WIFSTOPPED(status)) { ret = WTERMSIG(status); } } return ret; }