5

「psaux」と入力すると、psコマンドはプログラムが実行されたコマンド引数を表示します。一部のプログラムは、ステータスを示す方法としてこれを変更します。argv []フィールドを変更しようとしましたが、機能しないようです。ユーザーがpsと入力したときに表示されるようにコマンドライン引数を設定する標準的な方法はありますか?

つまり、これは機能しません。

int main(int argc,char **argv)
{
    argv[0] = "Hi Mom!";
    sleep(100);
}

09:40 imac3:~$ ./x &
[2] 96087
09:40 imac3:~$ ps uxp 96087 
USER      PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
yv32      96087   0.0  0.0  2426560    324 s001  S     9:40AM   0:00.00 ./x
09:40 imac3:~$ cat x.c
4

1 に答える 1

5

あなたは正しい考えを持っていましたが、のポインタを変更しないでください。それ自体argv[n]が指す文字列を変更する必要があります。argv[0]

#include <string.h>
#include <unistd.h>

int main(int argc,char **argv)
{
    size_t maxlen = strlen(argv[0]);

    memset(argv[0], 0, maxlen);
    strncat(argv[0], "Hi Mom!", maxlen);
    pause();

    return 0;
}

(これが実際にによって示されるコマンド名を変更するかどうかpsはシステムに依存することに注意してください)。

于 2010-09-21T14:00:15.427 に答える