国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 系統(tǒng) > Unix > 正文

《Unix環(huán)境高級(jí)編程》讀書筆記 第7章-進(jìn)程環(huán)境

2024-06-28 13:24:48
字體:
供稿:網(wǎng)友
《Unix環(huán)境高級(jí)編程》讀書筆記 第7章-進(jìn)程環(huán)境1. main函數(shù)
  • int main( int argc, char *argv[] );
  • argc是命令行參數(shù)的數(shù)目,包括程序名在內(nèi)
  • argv是指向參數(shù)的各個(gè)指針?biāo)鶚?gòu)成的數(shù)組,即指針數(shù)組
  • 當(dāng)內(nèi)核執(zhí)行C程序時(shí)(使用exec函數(shù)),在調(diào)用main前先調(diào)用一個(gè)特殊的啟動(dòng)例程。可執(zhí)行程序文件將此啟動(dòng)例程指定為程序的起始地址——這是由連接器設(shè)置的,而連接器則是由C編譯器調(diào)用。啟動(dòng)例程從內(nèi)核取得命令行參數(shù)和環(huán)境變量值,然后按上述方式調(diào)用main函數(shù)做好安排。
2. 進(jìn)程終止
  • 有8種方式使進(jìn)程終止,其中5種為正常終止
    1. 從main返回
    2. 調(diào)用exit
    3. 調(diào)用_exit或_Exit
    4. 最后一個(gè)線程從其啟動(dòng)例程返回
    5. 從最后一個(gè)線程調(diào)用pthread_exit
  • 異常終止有3種方式:
    1. 調(diào)用abort
    2. 接到一個(gè)信號(hào)
    3. 最后一個(gè)線程對(duì)取消請(qǐng)求做出響應(yīng)
2.1 退出函數(shù)
  1. #include <stdlib.h>
  2. void exit(int status);
  3. void _Exit(int status);
  4. #include <unistd.h>
  5. void _exit(int status);
  • _exit(由POSIX.1說明)和_Exit(由ISO C說明)立即進(jìn)入內(nèi)核,而exit(由ISO C說明)則先執(zhí)行一些清理處理,然后返回內(nèi)核。
  • 3個(gè)退出函數(shù)都帶一個(gè)整型參數(shù),稱為終止?fàn)顟B(tài)退出狀態(tài)。大多數(shù)Unix系統(tǒng)shell都提供檢測進(jìn)程終止?fàn)顟B(tài)的方法。
  • 下面幾種情況下,該進(jìn)程的終止?fàn)顟B(tài)是未定義的:
    1. 調(diào)用這些函數(shù)時(shí)不帶終止?fàn)顟B(tài)
    2. main執(zhí)行了一個(gè)無返回值的return語句
    3. main沒有聲明返回類型為整型
2.2 函數(shù)atexit
  1. #include <stdlib.h>
  2. int atexit(void (*func)(void)); // 參數(shù)是一個(gè)函數(shù)指針
  3. Returns: 0 if OK, nonzero on error
  • 按照ISO C的規(guī)定,一個(gè)進(jìn)程可以登記多至32個(gè)函數(shù),這些函數(shù)將由exit自動(dòng)調(diào)用。稱這些函數(shù)為終止處理程序
  • exit首先調(diào)用各終止處理程序,然后關(guān)閉所有打開流。exit調(diào)用這些函數(shù)的順序與它們登記的順序相反。
  • 如若程序調(diào)用exec函數(shù),則將清除所有已安裝的終止處理程序。
  • 注意:內(nèi)核使程序執(zhí)行的唯一方法是調(diào)用一個(gè)exec函數(shù)。進(jìn)程自愿終止的唯一方法是顯式或隱式(通過調(diào)用exit)地調(diào)用_exit或_Exit。進(jìn)程也可非自愿地由一個(gè)信號(hào)使其終止。

  • 一個(gè)C程序的啟動(dòng),以及它的各種終止方式

3. 命令行參數(shù)
  • 當(dāng)執(zhí)行一個(gè)程序時(shí),調(diào)用exec的進(jìn)程可將命令行參數(shù)傳遞給新程序。這是Unix shell的一部分常規(guī)操作。
4. 環(huán)境表
  • extern char **environ;稱environ為環(huán)境指針;指針數(shù)組為環(huán)境表,其中各指針指向的字符串為環(huán)境字符串
5. C 程序的存儲(chǔ)空間布局
  • 歷史沿襲至今,C程序一直由以下幾部分組成:

    1. 正文段。這是由CPU執(zhí)行的機(jī)器指令部分。通常,正文段是可由多個(gè)應(yīng)用程序共享的,在存儲(chǔ)器中只需一個(gè)副本。正文段常常是只讀的。
    2. 初始化數(shù)據(jù)段,也稱為數(shù)據(jù)段。包含了程序中需明確地賦初值的變量。
    3. 未初始化數(shù)據(jù)段,也稱為bss段(block started by symbol,由符號(hào)開始的塊)。在程序開始執(zhí)行之前,內(nèi)核將此段中的數(shù)據(jù)初始化為0或空指針。
    4. 棧。自動(dòng)變量以及每次函數(shù)調(diào)用時(shí)所需保存的信息都存放在此段中。
    5. 堆。通常在堆中進(jìn)行動(dòng)態(tài)存儲(chǔ)分配。慣例,堆位于未初始化數(shù)據(jù)段和棧之間。
  • 一種典型安排方式,這是程序的邏輯布局

  • size命令報(bào)告正文段、數(shù)據(jù)段和bss段的長度(以字節(jié)為單位)

    $ size /usr/bin/cc /bin/shtext data bss dec hex filename346919 3576 6680 357175 57337 /usr/bin/cc102134 1776 11272 115182 1c1ee /bin/sh第4、5列分別是以十進(jìn)制和十六進(jìn)制表示的3段總長度

6. 共享庫
  • 共享庫使得可執(zhí)行文件中不再需要包含公用的庫函數(shù),而只需要在所有進(jìn)程都可以引用的存儲(chǔ)區(qū)中保存這種庫例程的一個(gè)副本。減少了每個(gè)可執(zhí)行文件的長度,但增加了一些運(yùn)行時(shí)間開銷。這種時(shí)間開銷發(fā)生在該程序第一次被執(zhí)行時(shí),或者每個(gè)共享函數(shù)庫函數(shù)第一次被調(diào)用時(shí)。
  • 另一個(gè)優(yōu)點(diǎn)是可以用庫函數(shù)的新版本代替老版本而無需對(duì)使用該庫的程序重新連接編譯。
7. 存儲(chǔ)空間分配
  • ISO C說明了3個(gè)用于存儲(chǔ)空間動(dòng)態(tài)分配的函數(shù)

    malloc,初始值不確定calloc,每一位都初始化為0realloc,新增區(qū)域內(nèi)的初始值不確定

  1. #include <stdlib.h>
  2. void *malloc(size_t size);
  3. void *calloc(size_t nobj, size_t size);
  4. void *realloc(void *ptr, size_t newsize);
  5. All three return: non-null pointer if OK, NULL on error
  6. void free(void *ptr);
  • 這3個(gè)分配函數(shù)所返回的指針一定是適當(dāng)對(duì)齊的,滿足最苛刻的對(duì)齊要求,使其可用于任何數(shù)據(jù)對(duì)象。
  • 返回通用指針void *
  • 這些分配例程通常用sbrk系統(tǒng)調(diào)用實(shí)現(xiàn)。該系統(tǒng)調(diào)用擴(kuò)充或縮小進(jìn)程的堆。雖然sbrk可以擴(kuò)充或縮小進(jìn)程的存儲(chǔ)空間,但是大多數(shù)malloc和free的實(shí)現(xiàn)都不減少進(jìn)程的存儲(chǔ)空間。釋放的空間可供以后再分配,將它們保持在malloc池中而不返回給內(nèi)核。
  • 大多數(shù)實(shí)現(xiàn)所分配的存儲(chǔ)空間比所要求的要稍大一些,額外的空間用來記錄管理信息——分配塊的長度、指向下一個(gè)分配塊的指針等。
  • 常見錯(cuò)誤:1. 釋放一個(gè)已經(jīng)釋放了的塊;2. 調(diào)用free時(shí)所用的指針不是3個(gè)alloc函數(shù)的返回值;3. 忘記調(diào)用free造成內(nèi)存泄露。
8. 替代的存儲(chǔ)空間分配程序
  • libmalloc
  • vmalloc
  • quick-fit,歷史上所使用的標(biāo)準(zhǔn)malloc算法是最佳適配或首次適配存儲(chǔ)分配策略。quick-fit算法比上述兩種快,但可能使用較多存儲(chǔ)空間
  • jemalloc
  • TCMalloc,高性能、高擴(kuò)展性和高存儲(chǔ)效率。開源,是Google-perftools工具中的一個(gè)
  • 函數(shù)alloca,在當(dāng)前函數(shù)的棧幀上分配存儲(chǔ)空間,而不是在堆上。

    優(yōu)點(diǎn):當(dāng)函數(shù)返回時(shí),自動(dòng)釋放它所使用的棧幀,不再需要自己釋放空間缺點(diǎn):alloca函數(shù)增加了棧幀的長度,而某些系統(tǒng)在函數(shù)已經(jīng)被調(diào)用后不能增加棧幀長度,于是也就不能支持alloca函數(shù)。本書4個(gè)平臺(tái)均支持該函數(shù)。

9. 環(huán)境變量
  • Unix內(nèi)核并不查看這些字符串,它們的解釋完全取決于各個(gè)應(yīng)用程序。
  • LANG、PATH、HOME、PWD、TERM ...
  1. #include <stdlib.h>
  2. char *getenv(const char *name);
  3. Returns: pointer to value associated with name, NULL if not found
  1. #include <stdlib.h>
  2. int putenv(char *str); // name已存在,替換
  3. Returns: 0 if OK, nonzero on error
  4. int setenv(const char *name, const char *value, int rewrite); // 當(dāng)name已存在時(shí),根據(jù)rewrite參數(shù)而覆蓋或保持原值
  5. int unsetenv(const char *name); // 即使name不存在也不算出錯(cuò)
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产黄色av免费看| 综合激情亚洲| 国产极品视频| 国产99在线|亚洲| 中文乱码字幕高清在线观看| 91看片在线观看| 色悠久久久久综合网小说| 男人操女人免费网站| 国产无遮挡又黄又爽免费软件| 国产视频福利| 亚洲伊人网在线观看| 久久五月精品| 国产三区四区在线观看| 精品一区二区在线欧美| 中文字幕有码在线视频| 国产精品186在线观看在线播放 | 九九热在线观看视频| 黄色一级片视频| 国产不卡精品一区二区三区| eeuss影院在线观看| 最近久乱中文字幕| 亚洲xxxxxx| 国产一区二区三区不卡在线| 91欧美在线视频| 免费在线高清av| 国产乱在线观看视频| 国产对白国语对白| 黄色国产网站在线播放| 黄色av网站在线免费观看| 国产国产人免费人成免费视频| 人日人天天爽| 午夜视频在线看| 免费一区二区三区视频狠狠| 在线观看国产视频| 国产黄色av免费看| 综合蜜桃精品| 国产一二区在线观看| 好吊日视频在线观看| 免费在线黄色网址| 九九热免费视频| 天天艹天天操| sese一区| 青草在线视频在线观看| 一本大道久久a久久精品| 91欧美在线视频| 精品推荐国产麻豆剧传媒| 国产第一页在线视频| 国产精品bbw一区二区三区| 国产黄色大片在线观看| 国产91足控脚交在线观看| 91美女主播在线视频| 国产精品186在线观看在线播放| 国产在线超碰| 国产一级黄色电影| 国产无套粉嫩白浆在线2022年| 五月婷婷视频在线观看| 国产精品久久久久白浆| 伊人影院蕉久影院在线播放| 精品国产一区二区三区不卡在线 | 18av在线视频| 久久av少妇| 国产夫妻视频| 国产日韩网站| 樱花草在线观看www| 日本视频在线| 成年网站免费入口在线观看| 久热av在线| 国产小视频在线| 国产黄色在线| аⅴ成人天堂中文在线| 最新中文字幕av专区| 亚洲天堂久久久| 日本中文字幕在线视频| 精品国产一区二区三区不卡在线| 日韩精品免费一区二区| 国产乱精品一区二区三区| 中文乱码字幕av网站| 99视频免费| 免费观看久久久久| 尤物在线视频观看| 国产天堂素人系列在线视频| 制服丝袜中文字幕在线观看| 国产久草在线| 日本视频三区| 尤物在线视频观看| 国产对白在线| 国产写真视频在线观看| 国产在线观看a| 一级二级三级在线观看| 国产区在线观看| 九九视频在线播放| 日本福利在线观看| 99高清免费国产自产拍| 国产区av在线| 国产精品第八页| 最近中文字幕大全中文字幕免费| 在线中文字幕av| 国产日韩欧美一区二区三区视频| 成 人免费视频播放| 欧美日韩久久中文字幕| 日本高清不卡中文字幕| 亚洲视频在线观看不卡| 一本大道久久精品| av小说在线| 欧美亚洲另类在线观看| 四虎一区二区三区| 亚洲成av人影片在线观看| 四虎精品成人a在线观看| 亚色视频在线观看| 四虎精品视频| 欧美午夜电影一区二区三区| 亚洲天堂电影在线观看| 美女被人操视频在线观看| 久久久久久久美女| 国产乱妇乱子在线播视频播放网站| 国产女人在线观看| 国产一级黄色片免费| 国产二级c片l毛片| 四虎国产精品永久在线| 麻豆精品免费视频入口| 国产性网软件大全| 精品一区二区观看| wwww在线观看免费视频| 欧美成人久久电影香蕉| 天天爱天天做色综合| 国产精品视频流白浆免费视频| 最新国产在线| 在线一区观看| 国产尤物视频| 亚洲网站一区| 五月婷婷开心综合| 伊人久久青青草| 久艹在线视频| 91美女主播在线视频| 欧美大交乱xxxx| 国产成人午夜精品| 高潮白浆视频| 亚洲va国产日韩欧美精品色婷婷| 超碰在线97国产| 国产人成精品| 黄污在线观看| 在线免费观看黄色av| 黄色一级视频网站| 亚洲国产精华液| 国产天堂在线| 超碰在线影院| av超碰在线| 国产卡1卡2卡三卡在线| 亚洲男人的天堂成人| 国产一级网站视频在线| 另类综合图区| av一本在线| av手机天堂| 亚洲免费网站在线观看| 在线天堂av| 亚洲尤物在线视频| 国产黄色网页| 国产日产一区二区| 国产香蕉免费精品视频| 国产你懂的在线观看| 天堂资源最新版在线视频观看免费网| 在线观看中文| av一级在线| 在线成人一区| h网站久久久| 欧美人成在线观看网站高清| 日本久久国产| 日本福利午夜视频在线| 亚洲欧美小说国产图片| av亚洲在线| 亚洲一本大道| 亚洲精品久久久成人| 影音av资源站| 欧美性猛交xxxx免费看蜜桃| 亚洲一区免费在线| a视频在线看| 国产中文字幕在线看| 最近中文字幕大全中文字幕免费| 中文字幕网在线| 国产极品视频| 日本国产在线| 国产午夜在线视频| aaa大片在线观看| xxxx视频在线| 91超碰国产在线| 精品欧美不卡一区二区在线观看| 国产不卡在线| 在线播放黄色网址| 久草亚洲一区| 精品美女在线观看视频在线观看| 精品国产高清a毛片无毒不卡| 在线观看免费视频一区二区三区| 四虎成人精品在永久免费| 国内精品免费一区二区三区| 国产精品冒白浆免费视频| av在线免费观看网| 国产精品入口麻豆电影| 色中文字幕在线| 9色在线视频网站| 国产视频一二|