【问题标题】:Why execvp accepts 2 arguments为什么 execvp 接受 2 个参数
【发布时间】:2018-01-30 07:14:29
【问题描述】:

假设c中的代码如下:

#include <unistd.h>
#include <stdlib.h>

int main(int argc, char * argv[]) {
  char *args[] = {"/bin/echo", "1", NULL};
  execvp(args[0], args);
}

为什么execvp 接受 2 个参数?为什么不能是execvp(args) 并且在内部它会自动抓取可执行文件以从args[0] 运行?

【问题讨论】:

  • 如果argv[0]/bin/echo,你为什么要打扰execvp()?使用execv() 会更明智。
  • 因为阅读理解起来更清晰。此外,有两种不同的参数类型,因此不应将其合并为一种。

标签: c linux exec


【解决方案1】:

如果您希望进程的“名称”(在您的情况下为args[0])与实际的可执行程序不同怎么办?这是一个有效的用例,处理这两种情况的最简单解决方案是我们现在拥有的双参数execvp

【讨论】:

  • 一个经典的例子:登录 shell 由 argv[0] 指示,其中包含破折号 - — 例如/bin/-sh/bin/-ksh(或只是 -sh-ksh)——但 execv()execvp() 的第一个参数需要是一个存在的文件——/bin/sh/bin/ksh
猜你喜欢
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 2012-09-17
  • 2014-12-06
  • 2011-11-25
  • 1970-01-01
  • 2015-08-21
  • 2018-11-28
相关资源
最近更新 更多