所以我正在编写一个程序,其中参数如下:
program start emacs file.c
甚至
program wait
本质上,第一个参数 (argv[0]) 是程序名称,后面是用户输入。
在我的代码中,我调用了 execvp。问题是,我不完全确定我引用了正确的论据。
if (pid == 0) {
execvp(argv[1], argv); //Line of interest
exit(1);
}
argv[1] 和 argv 是为上述功能传递的正确参数吗?我查看了手册页,它们是有道理的,但对于这种情况可能不正确。 谢谢!
最佳答案
在您的 main 中,第一个示例中的 argv 将是这样的:
argv[0] = "program";
argv[1] = "start";
argv[2] = "emacs";
argv[3] = "file.c";
argv[4] = NULL;
在 execv 中,你想用参数“emacs file.c”执行程序“start”,对吧?那么第一个参数应该是 argv[1] - "start",第二个参数应该是一个包含以下字符串的数组:{"start", "emacs", "file.c", NULL}。如果使用 argv,则在 argv[0] 中包含“program”字符串。
您可以创建一个新数组并复制这些参数,或者像这样使用 argv[1] 的地址:
execvp(argv[1], &argv[1]); //Line of interest
关于C: execvp() 和命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21896000/