関数内でstaticで定義された変数は、その関数が終了してもその変数はそのまま残る。再びその関数が実行されるときにはその変数は前に実行した直後の状態となっている。
例 static.c
#include <stdio.h>
void func();
int main(int argc, char *argv[]){
func();
func();
return 0;
}
void func(){
static int i=0;
i++;
printf("%d\n",i);
}
実行例
$ ./static
1
2
staticで定義された変数で初期化されているものはdataセグメント、されていないものはbssセグメントに格納される。
また、staticな関数や関数定義の外側でstatic定義された変数は他のソースコードからは参照されないprivateなものとなる。
execl()はライブラリ関数
execve()はシステムコール
末尾にpがつくのはパスが通ったディレクトリを探しにいく。execlp()、execvep()
execl()は内部でexecve()を呼んでいる。
execl()はexecve()が呼び出したプログラムから制御が戻ってこない点を解決するために、内部で色々な処理をしている。