国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Linux中的perror,exit(),_exit(),wait,waitpid比較

2019-11-08 19:59:24
字體:
來源:轉載
供稿:網友
void perror(const char *s);  perror ("open_port"); 

函數說明

perror ( )用 來 將 上 一 個 函 數 發 生 錯 誤 的 原 因 輸 出 到 標 準 錯誤 (stderr) 。參數 s 所指的字符串會先打印出,后面再加上錯誤原因字符串

exit    在C語言的main函數中我們通常使用return (0);這樣的方式返回一個值。但這是限定在非void情況下的,也就是非void main()這樣的形式。     

exit()通常是用在子程序中用來終結程序用的,使用后程序自動結束。exit(0) 表示程序正常退出, exit(1)/exit(-1)表示程序異常退出。

 

(1)exit和return 的區別:

a.exit是一個函數,有參數。exit執行完后把控制權交給系統

b.return是函數執行完后的返回。renturn執行完后把控制權交給調用函數。

(2)exit和abort的區別:

a.exit是正常終止進程

b.about是異常終止。

3.exit和_exit函數都是用來終止進程的。

_exit()執行后立即返回給內核,而exit()要先執行一些清除操作,然后將控制權交給內核。調用_exit函數時,其會關閉進程所有的文件描述符,清理內存以及其他一些內核清理函數,但不會刷新流(stdin, stdout, stderr  ...).   exit函數是在_exit函數之上的一個封裝,其會調用_exit,并在調用之前先刷新流

exit()函數與_exit()函數最大區別就在于exit()函數在調用exit系統之前要檢查文件的打開情況,把文件緩沖區的內容寫回文件。 由于linux的標準函數庫中,有一種被稱作“緩沖I/O”的操作,其特征就是對應每一個打開的文件,在內存中都有一片緩沖區。每次讀文件時,會連續的讀 出若干條記錄,這樣在下次讀文件時就可以直接從內存的緩沖區讀取;同樣,每次寫文件的時候也僅僅是寫入內存的緩沖區,等滿足了一定的條件(如達到了一定數 量或遇到特定字符等),再將緩沖區中的內容一次性寫入文件。這種技術大大增加了文件讀寫的速度,但也給編程代來了一點兒麻煩。比如有一些數據,認為已經寫 入了文件,實際上因為沒有滿足特定的條件,它們還只是保存在緩沖區內,這時用_exit()函數直接將進程關閉,緩沖區的數據就會丟失。因此,要想保證數 據的完整性,就一定要使用exit()函數。

在一個進程調用了 exit 之后,該進程并不馬上就完全消失,而是留下一個稱為 僵尸進程 (Zombie)的數據結構。僵尸進程是一種非常特殊的進程,它幾乎已經放棄了所有內存空間, 沒有任何可執行代碼,也不能被調度,僅僅在進程列表中保留一個位置,記載該進程的退出 狀態等信息供其他進程收集,除此之外,僵尸進程不再占有任何內存空間.

wait  waitpid      wait 函數是用于使父進程(也就是調用 wait 的進程) 阻塞,直到一個子進程結束或者該進程接到了一個指定的信號為止。 如果該父進程沒有子進程或者他的子進程已經結束, wait則就會立即返回。 

     waitpid 的作用和 wait 一樣,但它并不一定要等待第一個終止的子進程,它還有若干選項,如可提供一個非阻塞版本的 wait 功能,也能支持作業控制。實際上 wait 函數只是 waitpid 函數的一個特例,在 Linux 內部實現 wait 函數時直接調用的就是 waitpid 函數。 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 且末县| 泸定县| 西藏| 自贡市| 二连浩特市| 宁化县| 仙桃市| 天峻县| 黑龙江省| 吉安县| 阳曲县| 松江区| 石阡县| 六盘水市| 久治县| 孟村| 镇安县| 松滋市| 密山市| 昆明市| 苏尼特左旗| 白城市| 涞源县| 惠东县| 宁夏| 铜山县| 惠州市| 电白县| 江川县| 桃园县| 开原市| 滨州市| 垣曲县| 通榆县| 泸水县| 仙居县| 乐至县| 通州区| 通化市| 新乡市| 明水县|