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 );

wherecmdPathは path です (この場合は/usr/bin/man) argschar*whereですargs[0] = man,args[1] = ls envenv*[]main から渡されたものです。

どんな助けでも大歓迎です。私はここで死にかけています。

4

1 に答える 1

3

execve に渡す引数は null で終了します。何かのようなもの

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 に答える