1

我在使用此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是我env*[]从 main 传递的。

任何帮助将非常感激。我要死在这里了。

4

1 回答 1

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);
}
于 2013-02-10T05:59:40.433 回答