我正在用C语言编写一个程序,它使用execv来调用传入原始函数的命令。
所以我会键入类似" ./ program echo" hello""而我程序中fork的子代将使用bash命令" echo hello"。
execv手册页非常模糊,它说"按照惯例,第一个参数应该指向与正在执行的文件相关联的文件名。"我想知道我是否理解这一点。
从我看过的例子中,这就是应该如何调用execv:
execv(argv[0], argv);
但我知道argv [0]只包含" ./ program"。所以我认为这只是执行它内部的相同功能,但它不是我在例子中看到的。
据我所知,它应该是这样的:
execv(argv[1],argv+1);
或
execv(argv[1],argv+2);
任何人都可以帮我理解这个吗?感谢。
答案 0 :(得分:0)
execv的FIRST参数是exec的应用程序。 “/ bin / echo” - 您可能不希望依赖环境变量的可用性来查找您的应用程序,因此首选完整路径。
execv的SECOND参数是一个以NULL结尾的const字符串数组,重复第一个参数的“/ bin / echo”,所以:
char *const params = { "/bin/echo", "hello", NULL };
execv("/bin/echo", params);