调用execve时执行错误(man,args,env)

时间:2013-02-10 04:40:52

标签: c linux

我遇到了这个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/manargschar*,其中args[0] = manargs[1] = ls env是我从{main}传递的env*[]

非常感谢任何帮助。我在这里死了。

1 个答案:

答案 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);
}