歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> Unix環境高級編程學習筆記---The Environment of a Unix Process

Unix環境高級編程學習筆記---The Environment of a Unix Process

日期:2017/3/6 15:26:47   编辑:關於Unix
在學習進程控制之前,先了解一下單個進程的環境. 本章包括如下內容: 進程基本情況; 參數傳遞過程; 程序的內存分配及布局; 環境變量; 1.進程中止的五種方法: 正常中止: 從main返回, 調用exit和調用_exit 非正常中止:調用abort 以及被信號(signal)中止 exit 在學習進程控制之前,先了解一下單個進程的環境.
本章包括如下內容:
進程基本情況;
參數傳遞過程;
程序的內存分配及布局;
環境變量;

1.進程中止的五種方法:
正常中止: 從main返回, 調用exit和調用_exit
非正常中止:調用abort 以及被信號(signal)中止

exit與_exit的區別主要在,前者在退出程序前將關閉該進程所有打開的文件流等清理工作,然後返回內核,而後者則直接返回內核,不作任何清理工作.
另外還有一個atexit函數,可以注冊一個函數在程序退出之前執行.
#include
int atexit(void (*func)(void)); //正確注冊返回0,否則返回非零值.
一個程序可以多次利用atexit注冊多個函數,調用順序則是注冊順序的逆續.

2.環境列表
程序在執行之前,shell將向程序進程傳遞參數列表以及環境列表(environment list)
環境列表是由字符指針組成的數組,這個數組的地址保存在一個全局環境變量中extern char **environ



3.C程序的內存布局
C程序包含五個內存部分
Text segment:存放機器指令,該部分一般是多個程序共享,並且為只讀
Initialized data segment: 存放被初始化的數據,如局部變量 int a = 1;
Uninitialzed data segment : 存放未被初始化數據,如數組 char buffer[100];
Stack: Automatic變量存放在堆棧中
Heap: 動態內存分配在Heap中.



4.內存分配
在Ansi C中規定了三個內存分配函數:malloc, calloc, realloc (均在Heap中分配內存)
#include
void*malloc(size_t size); //分配大小為size個字節的空間
void *calloc(size_t nobj, size_t size); //為指定個數的對象分配內存,每個對象大小為size字節,共分配nobj*size個字節
void *realloc(void *ptr,size_t newsize); //重新分配Ptr所指內存塊的大小,newsize為調整後的空間大小

Copyright © Linux教程網 All Rights Reserved