BAKの日記: プログラム起動のシステムコール
日記 by
BAK
ぐはっ. エンバグしてしまいました. 全くをもってその通りでございまする.
ま,argsdisp プログラムはこのぐらいにしておいて(といってごまかす),プログラム引数が出てきたので,この引数について掘り下げてみる.
システムコールとは,プログラムからカーネルに対して,仕事をお願いすること,である. システムコールは,C の関数の形でプログラムに埋め込まれる.
で,プログラムを起動するシステムコールであるが,execve というもので,Linux では以下の形で定義されている.
int execve (const char *filename, char *const argv [], char *const envp[]);
プログラムを起動するプログラム(シェルなど)は,
- filename にプログラムのファイル名(へのポインタ)
- argv[] にプログラム引数
- envp[] に継承する環境変数
をセットして execve をコールする.
すると,指定されたプログラムが起動される. 起動された側のプログラムでは,
int main ( int argc, char *argv[], char *envp[] )
という形の main 関数へと制御が移る. argv[] と,envp[] は,execve で指定されたものが参照される.