《APUE》第7章 進程環境-讀書筆記

1、main函數。數組

main函數的原型以下。argc是命令行參數的數目,argv是指向參數的各個指針所構成的數組。編輯器

int main(int argc, char *argv[])

當內核執行C程序時(使用一個exec函數),在調用main前先調用一個特殊的啓動例程。可執行程序文件將此啓動例程指定爲程序的起始地址,這是由鏈接編輯器設置的,而鏈接編輯器則由C編譯器調用。啓動例程從內核取得命令行參數和環境變量,而後爲調用main函數作好安排。函數

啓動例程使得main返回後當即調用exit函數。例如:佈局

exit(main(argc, argv));

 

2、進程終止。spa

有8種方式使進程終止。命令行

 

一、退出函數。3d

3個函數用於正常終止一個程序:_exit和_Exit當即進入內核,exit先執行一些清理工做而後返回內核。exit老是執行一個標準I/O庫的清理關閉操做:對於全部打開流調用fclose函數。指針

main函數返回一個整型值與該值調用exit是等價的。code

exit(0);
return (0);   //兩條語句等價

 

二、函數atexit。blog

一個進程可登記至多32個函數,這些函數由exit自動調用。稱這些函數爲終止處理函數,並調用atexit函數來登記這些函數。exit調用這些函數的順序與它們登記時候的順序相反。同一函數如若登記屢次,也會被調用屢次。exit首先調用各終止處理程序,而後關閉(經過fclose)全部打開流。

內核使用程序執行的惟一方式是調用一個exec函數。進程自願終止的惟一方式是顯示或隱式地(經過調用exit)調用_exit或_Exit。進程也可非自願地由一個信號使其終止。

 

3、命令行參數。

當執行一個程序時,調用exec的進程可將命令行參數傳遞給該新程序。注意:argv[argc]是一個空指針。

 1 #include <stdio.h>
 2 
 3 int main(int argc, char *argv[])
 4 {
 5     int i;
 6     for (i = 0; argv[i] != NULL; i++)
 7     {
 8         printf("argv[%d]: %s\n", i, argv[i]);
 9     }
10 
11     return 0;
12 }

 

4、環境表。

每一個程序都接收到一張環境表。與參數表同樣,環境表也是一個字符指針數組,其中每一個指針包含一個以null結束的C風格字符串地址。全局變量environ則包含了該指針數組的地址。

稱environ爲環境指針,指針數組爲環境表,其中各指針指向的字符串爲環境字符串。一般用getenv和putenv函數來訪問特定的環境變量,而不是用environ,但若是要查看整個環境,必須使用environ指針。

 

5、C程序的存儲空間佈局。

 

6、共享庫。

共享庫使得可執行文件中再也不須要包含公用的庫函數,而只需在全部進程均可引用的存儲區中保存這種庫的一個副本。程序第一次執行或者第一次調用某個庫函數時,用動態連接方法將程序與共享庫函數相連接。這減小了每一個可執行文件的長度,但增長了一些運行時間開銷。

 

7、函數setjmp和longjmp。

在C中,goto語句是不能跨越函數的,執行這種類型跳轉功能的是函數setjmp和longjmp。這兩個函數對於處理髮生在很深層嵌套函數調用中的出錯狀況是很是有用的。  

 

8、函數getrlimit和setrlimit。

每一個進程都有一組資源限制,其中一些能夠用getrlimit和setrlimit函數查詢和更改。進程的資源限制一般是在系統初始化時由0進程創建的,而後由後續進程繼承。每種實現均可以用本身的方法對資源限制作出調整。

相關文章
相關標籤/搜索