Unix环境高级编程学习笔记(五)
第七章 進程環境
1、main函數:int main(int argc, char *argv[])
2、進程中止:
正常中止:(1)從main返回;(2)調用exit;(3)調用_exit或_Exit;(4)最后一個線程從啟動例程返回;(5)最后一個線程調用pthread_exit;
異常中止:(6)調用abort;(7)接到一個信號并中止;(8)最后一個線程對取消請求做出反應。
?2.1、exit函數:#include<stdlib.h>
???void exit(int status);
??void _Exit(int status);
??#include<unistd.h>
??void _exit(int status);?????????????????? _exit,_Exit直接進入內核,exit則先進行一些清理處理(如關閉I/O流等等),然后進入內核。
?2.2、atexit函數:
?#include<stdlib.h>?int atexit(void (*func)(void));??一個進程結束時候調用的函數,能夠登記32個
?exit函數會先調用中止處理函數,然后關閉打開流,再進入內核。:if expand("%") == ""|browse confirm w|else|confirm w|endif
3、命令行參數:調用exec的進程能夠將命令行參數傳遞給新進程。
4、環境表:每個程序都會接受到一張環境表。?? extern char **environ
?按照慣例環境由name=value這樣的字符串組成。?? 通常用getenv和putenv函數來訪問特定的環境變量,但是如果要查看整個環境,則必須使用environ
5、c程序的存儲空間布局:正文段,初始化數據段,非初始化數據段,棧,堆。
6、共享庫:略。
7、存儲器分配:malloc,calloc,realloc。
#include<stdlib.h>
void *malloc(size_t size);?????????? 分配指定字節數存儲區,初始值不確定
void *calloc(size_t nobj, size_t size);??為指定數量且具有長度的的對象分配存儲空間
void *realloc(void *ptr, size_t newsize);?更改以前分配的長度
void free(void *ptr);
8、環境變量:
取環境變量:#include<stdlib.h>?? char *getenv(const char *name);?? 返回與name關聯的value指針,未找到返回null
設置環境變量(只會影響當前進程和子進程)
?#include<stdlib.h>????????? int putenv(char *str);?取形式為name = value的字符串,將其放到環境表中
???????? int setenv(const char *name, const char *value, int rewrite);?設置name為value,name已存在,若rewrite非0,則先刪除;若rewrite為0,則不刪除
??????? int unsetenv(const char *name);???? ?刪除name定義
9、setjmp和longjmp函數:實現跨越函數的跳轉。
#include<setjmp.h>
int setjmp(jmp_buf env);
void longjmp(jmp_buf env, int val);?????
示例:程序清單7-5
?9.1、自動、寄存器和易失變量:討論關于longjmp后變量是否會回滾為原來值。聲明為全局或靜態變量的值在執行longjmp保持不變。????
?程序清單7-6:全局、靜態和易失變量不受優化影響,他們的值是最近所呈現的值。
?9.2、自動變量的潛在問題:略。
10、getrlimit和setrlimit函數:每個進程都有一組資源限制,可以用這兩個函數查詢和更改。
#include<sys/resource.h>
int getrlimit(int resource, struct rlimit *rlptr);
int setrlimit(int resource, const struct rlimit *rlptr);
struct rlimit{
?rlim_t rlim_cur;/* 軟限制 */
?rlim_t rlim_max;/* 硬限制 */
};
更改資源限制時的原則:(1)、任何一個進程都可以將一個軟限制改為小于等于硬限制的值;(2)任何一個進程都可以降低硬限制的值,但是必須大于等于軟限制的值;(3)只有超級用戶可以提升硬限制的值。
resource可以取得值有:RLIMIT_AS(進程可用存儲區的最大總長度),RLIMIT_CORE(core文件的最大字節數),RLIMIT_CPU(CPU時間的最大量值)等等。(P165)
轉載于:https://www.cnblogs.com/Just-do-it110/archive/2011/08/03/2126620.html
總結
以上是生活随笔為你收集整理的Unix环境高级编程学习笔记(五)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux100day(day8)--s
- 下一篇: Advapi 登录类型8的错误