天天看點

APUE 第七章

exec先調用啟動例程,啟動例程從核心取得指令行參數

退出函數

exit

_exit 或者_Exit

echo $? 擷取函數(比如main函數)的傳回值

exit會調用一些函數,稱為終止處理程式,而atexit用來登記這些函數

APUE 第七章

核心使程式執行的唯一方法是調用一個exec函數 

 環境表

如下,為一堆鍵值對

APUE 第七章

 空間分布,棧一般都在高處(Linux從0xC0000000開始),正文一般是CPU機器指令(linux從0x08048000開始),每次函數調用都會生成棧幀,我的了解是,一個函數調用對應一個棧幀

APUE 第七章

相關的linux指令如下:,其中text代表正文段,即CPU執行的機器指令

使用共享庫的text,data,bss均大大減小,因為可執行檔案不再需要包含公共的庫函數(使用者态函數,比如malloc)

data代表已經初始化的資料,比如函數體外的:

int maxlen = 100;
           

,bss代表未初始化的資料,比如函數體外的:

long a[1000];
           
[email protected]:/home/learnApue/apue.3e/environ# ./echoarg arg1 Test foo
argv[0]: ./echoarg
argv[1]: arg1
argv[2]: Test
argv[3]: foo


[email protected]:/home/learnApue/apue.3e# size /usr/bin/cc /bin/sh 
   text	   data	    bss	    dec	    hex	filename
1131683	  15176	  15048	1161907	 11bab3	/usr/bin/cc
 114971	   4856	  11312	 131139	  20043	/bin/sh






[email protected]:/home/learnApue/apue.3e/environ# gcc -static  doatexit.c  //不使用共享庫
[email protected]:/home/learnApue/apue.3e/environ# ls -l a.out
-rwxr-x--- 1 root root 876704 Sep  5 04:45 a.out
[email protected]:/home/learnApue/apue.3e/environ# size a.out //使用共享庫
   text	   data	    bss	    dec	    hex	filename
 764793	  20996	   6016	 791805	  c14fd	a.out



[email protected]:/home/learnApue/apue.3e/environ# gcc  doatexit.c 
[email protected]:/home/learnApue/apue.3e/environ# ls -l a.out
-rwxr-x--- 1 root root 17568 Sep  5 04:45 a.out
[email protected]:/home/learnApue/apue.3e/environ# size a.out
   text	   data	    bss	    dec	    hex	filename
   4908	    688	     48	   5644	   160c	a.out
           

環境變量

getenv(name) 擷取指定name的環境變量值

putenv/setenv 設定環境變量

unsetenv(name) 删除指定name環境變量的定義

看到unsetenv

繼續閱讀