我遇到了这个execve
命令的问题。我可以用它在我的程序中运行大多数其他命令,但如果我尝试像man ls
那样做,我会收到此错误。
man: can't execute pager: No such file or directory
man: command exited with status 255: LESS=-ix8RmPm Manual page ls(1) ?ltline %lt?L/%L.:byte %bB?s/%s..?e (END):?pB %pB\%.. (press h for help or q to quit)$PM Manual page ls(1) ?ltline %lt?L/%L.:byte %bB?s/%s..?e (END):?pB %pB\%.. (press h for help or q to quit)$ MAN_PN=ls(1) pager -s
以下是我如何称呼它:
execve( cmdPath, args, env );
其中cmdPath
是路径(在这种情况下为/usr/bin/man
)
args
是char*
,其中args[0] = man
,args[1] = ls
env
是我从{main}传递的env*[]
。
非常感谢任何帮助。我在这里死了。
答案 0 :(得分:3)
Null终止传递给execve的参数。像
这样的东西char *args[3];
// other args..
args[2] = (char*) 0;
这是未定义的行为,否则这可能是它过去曾经有效的原因,而这次你运气不好。
这有效:
int main(int argc, char *argv[], char *env[])
{
char *args[3];
args[0] = "man";
args[1] = "ls";
args[2] = (char*) 0;
execve("/usr/bin/man", args, env);
}