首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >execve如何运行命令?

execve如何运行命令?
EN

Stack Overflow用户
提问于 2022-11-14 14:58:35
回答 2查看 44关注 0票数 0

我尝试使用execve来运行命令:ls -l /tmp,我熟悉系统调用的用法,但不知道它是如何运行命令的。

我试过了,我不断地犯错误

代码语言:javascript
复制
char *argv[] = {"ls", "-l", NULL};

int exec;

exec = execve("/tmp", argv, NULL);
printf("%d\n", exec);
return (0);
EN

回答 2

Stack Overflow用户

发布于 2022-11-14 15:04:25

您没有正确地使用execve。第一个参数必须是可执行路径。

所以你的代码应该是

代码语言:javascript
复制
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),因此不会执行最后两行

票数 2
EN

Stack Overflow用户

发布于 2022-11-14 15:01:58

execve的第一个参数必须是要执行的程序的路径:

代码语言:javascript
复制
exec = execve("/bin/ls", argv, NULL);

第二个参数argv必须是所有参数的列表:

代码语言:javascript
复制
char *argv[] = {"ls", "-l", "/tmp", NULL};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74433634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档