一般に、argv [0]はexecファイル名と同じです。例えば:私はargv[0]
が/home/username/my_program
で、その後/home/username/my_program
してプログラムを実行した場合、私はその後、argv[0]
./my_program
してプログラムを実行した場合PATH envとargv [0]の関係。
- は
./my_program
- です。
PATH=/home/username
私の質問は、なぜargv[0]
の値が見えないのですか?
この私の本当の状況です
PATH=/home/knight/bin:/home/knight/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/knight
私のテストプログラムのソースは次のとおりです。
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%s\n", argv[0]);
}
マイホームディレクトリは/home/knight
あるので、私は直接プログラムを実行することができます。
[email protected]:~$ test
[email protected]:~$ ./test
./test
[email protected]:~$ test
コマンドで結果が表示されないのはなぜですか?
'test'は[bashのキーワード](http://wiki.bash-hackers.org/commands/classictest)であるので、あなたが実際にするとき、あなたの実行可能ファイルを実行していませんコマンドプロンプトで 'test'と打ちます。 –
@ PaulRの観察はあなたの質問全体を無関係にしますか?*他の*プログラム名の動作を知りたいのですか? – usr2564301
UNIX系のシステムでは、環境変数は伝統的にenvまたはargenというポインタを介して渡されます。 mainはint main(int argc、char ** argv、char ** argenv)というシグネチャを持っています。もちろん、非UNIXの移植性はありません。 –