我尝试使用execve来运行命令:ls -l /tmp,我熟悉系统调用的用法,但不知道它是如何运行命令的。
我试过了,我不断地犯错误
char *argv[] = {"ls", "-l", NULL};
int exec;
exec = execve("/tmp", argv, NULL);
printf("%d\n", exec);
return (0);发布于 2022-11-14 15:04:25
您没有正确地使用execve。第一个参数必须是可执行路径。
所以你的代码应该是
int main(void) {
char *argv[] = {"ls", "-l", "/tmp", NULL};
execve("/bin/ls", argv, NULL);
// Or "/usr/bin/ls", depending where
// is stored 'ls' on your system
// On success theses lines are not reached
perror("execve failed");
return 0;
}请注意(来自人类的):
返回值
在成功时,execve()不返回,返回的是error -1,并将errno设置为指示错误。
如果execve调用成功,您的程序将被已启动的程序替换(此处为ls),因此不会执行最后两行
发布于 2022-11-14 15:01:58
execve的第一个参数必须是要执行的程序的路径:
exec = execve("/bin/ls", argv, NULL);第二个参数argv必须是所有参数的列表:
char *argv[] = {"ls", "-l", "/tmp", NULL};https://stackoverflow.com/questions/74433634
复制相似问题