argv = {'/usr/bin/grep', '/usr/bin/grep', '-ri', 'test', '.', 0}
pid_t pid = fork();
if (pid == 0) {
execv(argv[0], argv);
exit(0);
}
else {
wait(NULL);
}
这就是我的代码。我只是想让 grep 命令运行。我遇到的问题是它认为第二个/usr/bin/grep 是搜索模式。
我尝试将 argv 数组更改为仅包含一个/usr/bin/grep,但出现错误并且不运行 grep。有什么帮助吗?
最佳答案
execv
将命令作为第一个参数,因此您需要 "usr/bin/grep"
而不是您正在运行的程序 argv[0]
。同时从 argv
中删除第一个参数。
我还会检查 grep
是否在 /usr/bin
中,它通常位于 /bin
中。
关于C++ 在 execv 中运行 grep 搜索可执行路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22583504/