2004-11-28
_ environ
プログラミング言語 C の main() には第 3 引数があったよなあということでメモ。
詳解 UNIX プログラミング pp162 より。
歴史的に、ほとんどの UNIX システムでは main 関数の第 3 引数に環境リストのアドレスを渡す。( 中略 )。ANSI C では main 関数の引数は 2 つであると規定しており、大域変数 environ があるため 3 番目の引数を使う利点はないが、POSIX.1 では( 可能なかぎり )第 3 引数の代わりに environ を使うように規定している。特定の環境変数を参照するには、environ 変数の代わりに getenv と putenv 関数を使う。しかし、環境全体を調べるには environ ポインタを使う必要がある。
大域変数 environ 。
rin@sakura[~/work/c]% cat -n env.c 1 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 extern char** environ; 6 7 int main( int ac, char** av ) 8 { 9 char** e; 10 for( e = environ; *e != NULL; *e++ ) 11 printf( "%s\n", *e ); 12 13 return 0; 14 }
main の第 3 引数。
rin@sakura[~/work/c]% cat -n env1.c 1 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int main( int ac, char** av, char** environ ) 6 { 7 char** e; 8 for( e = environ; *e != NULL; *e++ ) 9 printf( "%s\n", *e ); 10 11 return 0; 12 }
やってることは env(1) と同じ。
rin@sakura[~/work/c]% diff `./a.out | sort` `env | sort` diff: rin@sakura[~/work/c]%
参考
4894713195
_ 昼寝
1500 〜 2200 。