溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux中怎么調(diào)用常見的函數(shù)

發(fā)布時(shí)間:2021-07-14 14:13:03 來源:億速云 閱讀:195 作者:Leah 欄目:云計(jì)算

本篇文章為大家展示了Linux中怎么調(diào)用常見的函數(shù),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

Linux中常見的函數(shù)調(diào)用

一、 創(chuàng)建進(jìn)程

創(chuàng)建進(jìn)程的總結(jié):

1、Linux中父進(jìn)程調(diào)用fork創(chuàng)建子進(jìn)程。

2、父進(jìn)程調(diào)用fork時(shí),子進(jìn)程拷貝所有父進(jìn)程的數(shù)據(jù)接口和代碼過來。

3、當(dāng)前進(jìn)程是子進(jìn)程,fork返回0;當(dāng)前進(jìn)程是父進(jìn)程,fork返回子進(jìn)程進(jìn)程號(hào)

4、如果返回0,說明當(dāng)前進(jìn)程是子進(jìn)程,子進(jìn)程請(qǐng)求execve系統(tǒng)調(diào)用,執(zhí)行另一個(gè)程序。

5、如果返回子進(jìn)程號(hào),說明當(dāng)前進(jìn)程是父進(jìn)程,按照原父進(jìn)程原計(jì)劃執(zhí)行。

6、父進(jìn)程要對(duì)子進(jìn)程負(fù)責(zé),調(diào)用waitpid將子進(jìn)程進(jìn)程號(hào)作為參數(shù),父進(jìn)程就能知道子進(jìn)程運(yùn)行完了沒有,成功與否。

7、操作系統(tǒng)啟動(dòng)的時(shí)候先創(chuàng)建了一個(gè)所有用戶進(jìn)程的“祖宗進(jìn)程”,課時(shí)1,第3題A選項(xiàng):0號(hào)進(jìn)程是所有用戶態(tài)進(jìn)程的祖先

創(chuàng)建進(jìn)程的系統(tǒng)調(diào)用:fork
執(zhí)行另一個(gè)程序的系統(tǒng)調(diào)用:execve
將子進(jìn)程的進(jìn)程號(hào)作為參數(shù)傳給它,父進(jìn)程就能知道子進(jìn)程運(yùn)行完了沒有,成功與否:waitpid

二、 內(nèi)存管理

內(nèi)存管理總結(jié)

1、每個(gè)進(jìn)程都有獨(dú)立的進(jìn)程內(nèi)存空間,互相之間不干擾。(隔離性)

2、進(jìn)程內(nèi)存空間,存放程序代碼的部分,稱為代碼段(Code Segment)。

3、存放進(jìn)程運(yùn)行中產(chǎn)生數(shù)據(jù)的部分,稱為數(shù)據(jù)段(Data Segment)。

4、進(jìn)程寫入數(shù)據(jù)的時(shí)候,現(xiàn)用現(xiàn)分物理內(nèi)存給進(jìn)程使用。

5、分配內(nèi)存數(shù)量比較小時(shí),使用brk調(diào)用,會(huì)和原來的堆數(shù)據(jù)連在一起。

6、需要分配的內(nèi)存數(shù)據(jù)量比較大的時(shí)候,使用mmap,重新劃分一塊內(nèi)存區(qū)域。

分配較小內(nèi)存數(shù)量,和原來堆內(nèi)數(shù)據(jù)連在一起:brk
分配較大內(nèi)存數(shù)量,重新劃分一塊內(nèi)存區(qū)域:mmap

三、 文件管理

文件的操作六個(gè)最重要系統(tǒng)調(diào)用:
打開文件:open
關(guān)閉文件:close
創(chuàng)建文件:creat
打開文件后跳到文件某個(gè)位置:lseek
讀文件:read
寫文件:write
Linux一切皆文件
一切皆文件的優(yōu)勢(shì)即使統(tǒng)一了操作的入口,提供了極大的便利。

四、 信號(hào)處理(異常處理)

進(jìn)程執(zhí)行過程中一旦有變動(dòng),就可以通過信號(hào)處理服務(wù)及時(shí)處理。

五、 進(jìn)程間通信

有兩種方式實(shí)現(xiàn)進(jìn)程間通信
消息隊(duì)列方式
創(chuàng)建一個(gè)新的隊(duì)列:msgget
發(fā)送消息到消息隊(duì)列:msgsnd
取出隊(duì)列中的消息:msgrcv

六、 共享內(nèi)存方式

創(chuàng)建共享內(nèi)存塊:shmget
將共享內(nèi)存映射到自己的內(nèi)存空間:shmat
利用信號(hào)量實(shí)現(xiàn)隔離性
占用信號(hào)量:sem_wait
釋放信號(hào)量:sem_post

偽代碼: 假設(shè)信號(hào)量為1 signal = 1 sem_wait偽代碼 while True { if sem_wait == 1; signal -=1; break; } code.code; sem_post偽代碼 signal +=1;

七、 網(wǎng)絡(luò)通信

網(wǎng)絡(luò)插口:socket
網(wǎng)絡(luò)通信遵循TCP/IP網(wǎng)絡(luò)協(xié)議棧

八、 glibc

glibc是Linux下開源標(biāo)準(zhǔn)C庫(kù)
glibc把系統(tǒng)調(diào)用進(jìn)一步封
sys_open對(duì)應(yīng)glibc的open函數(shù)
一個(gè)單獨(dú)的glibcAPI可能調(diào)用多個(gè)系統(tǒng)調(diào)用
printf函數(shù)調(diào)用sys_open、sys_mmap、sys_write、sys_close等等系統(tǒng)調(diào)用

上述內(nèi)容就是Linux中怎么調(diào)用常見的函數(shù),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI