【嵌入式八股24】linux軟件開發(fā)知識點
寫一半我真后悔了,這篇太長了……
一、進程間通訊方式
在 Linux 系統(tǒng)中,進程間通訊(IPC)是實現(xiàn)不同進程之間數(shù)據(jù)交互和協(xié)同工作的重要機制,常見的通訊方式有以下幾種:
- 管道(Pipe)及有名管道(named pipe):
- 管道:是一種半雙工的通信方式,數(shù)據(jù)只能單向流動,且只能在具有親緣關系(如父子進程)的進程間使用。它在創(chuàng)建時會在內(nèi)核中開辟一塊緩沖區(qū),用于數(shù)據(jù)的傳輸。
- 有名管道:克服了管道只能在親緣關系進程間通信的限制,它以文件的形式存在于文件系統(tǒng)中,通過文件名來訪問。不同進程只要擁有對該文件的訪問權(quán)限,就可以進行通信。
- 信號(Signal):是一種異步通信機制,用于通知進程發(fā)生了某種事件。信號可以由系統(tǒng)內(nèi)核、其他進程或用戶手動發(fā)送,進程接收到信號后會根據(jù)預先設置的信號處理函數(shù)來做出相應的響應,如終止進程、暫停進程等。
- 報文(Message)隊列(消息隊列):消息隊列是一個消息的鏈表,存放在內(nèi)核中。進程可以向消息隊列中發(fā)送消息,也可以從消息隊列中讀取消息。消息隊列可以實現(xiàn)不同進程間的消息傳遞,并且可以根據(jù)消息的類型進行分類處理。
- 共享內(nèi)存:是一種高效的進程間通信方式,它允許不同進程訪問同一塊內(nèi)存區(qū)域。進程可以直接對共享內(nèi)存進行讀寫操作,從而實現(xiàn)數(shù)據(jù)的共享。為了保證數(shù)據(jù)的一致性和正確性,使用共享內(nèi)存時需要配合信號量等同步機制來避免數(shù)據(jù)沖突。
- 信號量(semaphore):本質(zhì)上是一個計數(shù)器,用于控制對共享資源的訪問。它可以實現(xiàn)進程間的同步和互斥,確保在同一時刻只有一個或多個進程可以訪問共享資源,防止數(shù)據(jù)競爭和不一致的問題。
- 套接口(Socket):是一種通用的進程間通信機制,不僅可以用于同一臺主機上的進程間通信,還可以用于不同主機之間的網(wǎng)絡通信。Socket 支持多種通信協(xié)議,如 TCP、UDP 等,根據(jù)不同的需求可以選擇合適的協(xié)議進行通信。
二、內(nèi)存管理相關
(一)內(nèi)存申請函數(shù)
在 C 語言中,常用的內(nèi)存申請函數(shù)有以下幾個,它們在動態(tài)內(nèi)存分配中起著關鍵作用:
calloc
:函數(shù)會在內(nèi)存中分配一塊指定大小的內(nèi)存空間,并將該空間的所有字節(jié)初始化為 0。它接受兩個參數(shù),分別是元素個數(shù)和每個元素的大小,返回指向分配內(nèi)存的指針。例如,calloc(10, sizeof(int))
會分配 10 個int
類型大小的內(nèi)存空間,并初始化為 0。malloc
:用于分配指定字節(jié)數(shù)的內(nèi)存空間。它只有一個參數(shù),即要分配的字節(jié)數(shù),返回指向分配內(nèi)存的指針。如果分配失敗,返回NULL
。例如,int *ptr = malloc(10 * sizeof(int))
分配了 10 個int
類型大小的內(nèi)存空間。realloc
:可以重新調(diào)整已分配內(nèi)存的大小。它接受兩個參數(shù),第一個是指向已分配內(nèi)存的指針,第二個是新的內(nèi)存大小。如果重新分配成功,返回指向新內(nèi)存的指針;如果失敗,返回NULL
。例如,ptr = realloc(ptr, 20 * sizeof(int))
可以將原來分配的內(nèi)存空間大小調(diào)整為 20 個int
類型大小。
(二)Linux 內(nèi)存分配說明
在 Linux 系統(tǒng)中,內(nèi)存被劃分為多個區(qū)域,每個區(qū)域有其特定的用途和特點,存放不同類型的數(shù)據(jù):
靜態(tài)存儲區(qū) | 靜態(tài)數(shù)據(jù)、全局數(shù)據(jù)、常量 | 在程序編譯的時候就已經(jīng)分配好,其生命周期與程序的運行周期相同,在程序結(jié)束時才會被釋放。 |
棧區(qū) | 局部變量、函數(shù)參數(shù) | 棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,因此效率很高,但棧的大小有限,分配的內(nèi)存容量相對較小。當函數(shù)調(diào)用時,局部變量和函數(shù)參數(shù)會被壓入棧中;函數(shù)返回時,這些數(shù)據(jù)會被彈出棧。 |
堆區(qū) | malloc 申請的內(nèi)存 |
用于動態(tài)內(nèi)存分配,需要程序員手動使用 free 函數(shù)來釋放內(nèi)存,否則可能會導致內(nèi)存泄漏。堆內(nèi)存的分配比較靈活,可以根據(jù)程序的需求動態(tài)調(diào)整大小。 |
代碼區(qū) | 代碼 | 存放函數(shù)體的二進制代碼,是程序執(zhí)行的指令集合。代碼區(qū)是只讀的,防止程序意外修改自身的指令。 |
文字常量區(qū) | 常量字符串 | 程序結(jié)束后由系統(tǒng)釋放,存放程序中定義的常量字符串,這些字符串在程序運行過程中不會被修改。 |
三、GCC 編譯過程
GCC(GNU Compiler Collection)是 Linux 系統(tǒng)中常用的編譯器,它將 C/C++ 等源程序編譯成可執(zhí)行文件需要經(jīng)過多個步驟,每個步驟都有其特定的作用和生成的文件:
預編譯 | *.i |
預處理器首先處理源文件中的預處理指令,如 #include (包含頭文件)、#define (宏定義)等,將頭文件的內(nèi)容插入到源文件中,并展開宏定義。經(jīng)過預編譯后,生成一個 .i 文件,該文件包含了展開后的源代碼。 |
編譯 | *.s |
編譯器將預編譯后的 .i 文件進行語法分析、語義分析和優(yōu)化等操作,生成匯編代碼,保存在 .s 文件中。 |
匯編 | *.o |
匯編器將匯編代碼轉(zhuǎn)換為機器可執(zhí)行的目標代碼,生成 .o 文件。每個 .c 文件經(jīng)過編譯和匯編后都會生成一個對應的 .o 文件。 |
鏈接 | 可執(zhí)行文件 | 鏈接器將多個 .o 文件以及所需的庫文件進行鏈接,解析符號引用,將各個目標文件和庫文件中的代碼和數(shù)據(jù)組合成一個完整的可執(zhí)行文件。 |
四、文件系統(tǒng)
文件系統(tǒng)是 Linux 系統(tǒng)中用于組織和存儲文件的重要機制,常見的文件系統(tǒng)有以下幾種,它們在不同的場景中有著各自的優(yōu)勢和應用:
fat |
早期廣泛使用的文件系統(tǒng),兼容性好,支持多種操作系統(tǒng),但安全性和性能相對較低,不支持大文件和長文件名。 |
fat32 |
是 fat 文件系統(tǒng)的擴展,支持更大的分區(qū)和文件,提高了對大文件的支持能力,但仍然存在一些局限性,如單個文件大小不能超過 4GB。 |
ntfs |
是 Windows 系統(tǒng)常用的文件系統(tǒng),具有較高的安全性和性能,支持文件壓縮、加密、權(quán)限管理等功能,但在 Linux 系統(tǒng)中對 ntfs 的支持相對有限。 |
ext2 |
是 Linux 系統(tǒng)早期的文件系統(tǒng),具有較好的性能和穩(wěn)定性,但不支持日志功能,在系統(tǒng)崩潰時可能會導致數(shù)據(jù)丟失。 |
ext3 |
在 ext2 的基礎上增加了日志功能,提高了文件系統(tǒng)的可靠性和數(shù)據(jù)安全性,當系統(tǒng)崩潰時可以通過日志恢復文件系統(tǒng)的一致性。 |
ext4 |
是 ext3 的升級版本,進一步提高了性能、支持更大的文件和分區(qū),并且增加了一些新的特性,如延遲分配、多塊分配等,是目前 Linux 系統(tǒng)中常用的文件系統(tǒng)之一。 |
nfs |
網(wǎng)絡文件系統(tǒng),允許不同的計算機通過網(wǎng)絡共享文件和目錄,使得用戶可以像訪問本地文件系統(tǒng)一樣訪問遠程的文件資源,常用于分布式系統(tǒng)和網(wǎng)絡存儲環(huán)境中。 |
五、硬鏈接和軟連接
在 Linux 系統(tǒng)中,鏈接是一種特殊的文件,用于指向其他文件或目錄,分為硬鏈接和軟鏈接(符號鏈接),它們在實現(xiàn)方式和特點上有所不同:
(一)硬鏈接
硬鏈接直接指向文件的 i 節(jié)點(索引節(jié)點),它和原文件具有相同的 i 節(jié)點,共享相同的數(shù)據(jù)和屬性。因此,硬鏈接文件顯示的大小和原文件是一樣的,并且對原文件的修改也會反映在硬鏈接文件中。需要注意的是,硬鏈接不能鏈接目錄文件,因為這可能會導致目錄結(jié)構(gòu)的混亂。例如:
ln file2 /home/xiaxiaowen/file2hard
上述命令創(chuàng)建了一個名為 file2hard
的硬鏈接,指向 file2
文件。
(二)軟鏈接(符號鏈接)
軟鏈接則是建立了一個新的文件,這個文件包含了指向目標文件的路徑信息。軟鏈接文件和原文件的 i 節(jié)點不一樣,它類似于一個快捷方式。軟鏈接可以鏈接目錄,并且當原文件被刪除或移動時,軟鏈接會變成無效鏈接。例如:
ln -s file2 /home/xiaxiaowen/file2soft
上述命令創(chuàng)建了一個名為 file2soft
的軟鏈接,指向 file2
文件。
六、Linux 內(nèi)核子系統(tǒng)
Linux 內(nèi)核是操作系統(tǒng)的核心部分,由多個子系統(tǒng)組成,這些子系統(tǒng)協(xié)同工作,提供了系統(tǒng)的基本功能和服務:
- 進程管理:負責進程的創(chuàng)建、調(diào)度、終止等操作,管理進程的生命周期。它包括進程的狀態(tài)轉(zhuǎn)換(如運行態(tài)、就緒態(tài)、阻塞態(tài)之間的轉(zhuǎn)換)、進程間的通信和同步等功能,確保系統(tǒng)中多個進程能夠高效、有序地運行。
- 內(nèi)存管理:對系統(tǒng)的內(nèi)存資源進行分配、回收和管理,包括物理內(nèi)存和虛擬內(nèi)存的管理。內(nèi)存管理子系統(tǒng)負責將內(nèi)存分配給進程使用,并通過虛擬內(nèi)存技術使得進程能夠使用比實際物理內(nèi)存更大的地址空間,同時還需要處理內(nèi)存的換入換出等操作,以提高內(nèi)存的利用率。
- I/O 管理:管理系統(tǒng)的輸入輸出設備,包括磁盤、網(wǎng)卡、串口等設備。它負責設備的驅(qū)動程序管理、數(shù)據(jù)的讀寫操作以及設備的中斷處理等,為用戶和應用程序提供了統(tǒng)一的 I/O 接口,使得應用程序可以方便地訪問各種設備。
- 文件系統(tǒng)管理:負責管理文件系統(tǒng)的創(chuàng)建、掛載、卸載以及文件的讀寫、目錄的操作等。文件系統(tǒng)管理子系統(tǒng)提供了對文件和目錄的組織和存儲功能,使得用戶可以方便地存儲和訪問數(shù)據(jù)。
七、進程狀態(tài)
在 Linux 系統(tǒng)中,進程有多種狀態(tài),這些狀態(tài)反映了進程在不同時刻的運行情況:
- 運行態(tài):進程正在處理器上執(zhí)行,占用 CPU 資源。在單處理器系統(tǒng)中,同一時刻只有一個進程處于運行態(tài);在多處理器系統(tǒng)中,可能有多個進程同時處于運行態(tài)。
- 就緒態(tài):進程已經(jīng)準備好執(zhí)行,但由于 CPU 資源有限,暫時沒有被調(diào)度到處理器上運行。就緒態(tài)的進程在就緒隊列中等待調(diào)度,一旦獲得 CPU 資源,就可以立即進入運行態(tài)。
- 阻塞態(tài):進程因為等待某個事件的發(fā)生(如 I/O 操作完成、等待信號等)而暫時無法繼續(xù)執(zhí)行,此時進程會進入阻塞態(tài)。在阻塞態(tài)下,進程不會占用 CPU 資源,直到所等待的事件發(fā)生,進程才會從阻塞態(tài)轉(zhuǎn)換為就緒態(tài)。
八、文件系統(tǒng)組成
Linux 文件系統(tǒng)由多個部分組成,每個部分都有其特定的功能和作用,共同構(gòu)成了文件系統(tǒng)的完整結(jié)構(gòu):
- 超級塊:存放文件系統(tǒng)本身的信息,比如文件系統(tǒng)的類型、每個區(qū)域的大小、未被使用的磁盤塊的信息等。不同版本的文件系統(tǒng),超級塊的具體內(nèi)容可能會稍有差別。超級塊是文件系統(tǒng)的關鍵部分,它描述了文件系統(tǒng)的整體布局和屬性。
- i-節(jié)點表:每個文件都有其屬性,如文件的大小、所有者、最近修改時間等,這些屬性被存儲在
ino_t
的結(jié)構(gòu)體中,稱為 i 節(jié)點。所有的 i 節(jié)點都有相同的大小,i 節(jié)點表就是這樣一些節(jié)點的列表。表中的每個 i 節(jié)點都通過位置來標識,例如標識為 2 的 i 節(jié)點位于文件系統(tǒng) i 節(jié)點表中的第 3 個位置(因為索引通常從 0 開始計數(shù))。i 節(jié)點是文件系統(tǒng)中用于管理文件屬性和數(shù)據(jù)存儲位置的重要數(shù)據(jù)結(jié)構(gòu)。 - 數(shù)據(jù)塊:用于存放文件的內(nèi)容。由于數(shù)據(jù)塊的大小是固定的,所以有時一個文件會分布在多個數(shù)據(jù)塊上,甚至可能分布在多個磁盤上。數(shù)據(jù)塊是文件數(shù)據(jù)的實際存儲單元,文件系統(tǒng)通過 i 節(jié)點來記錄文件數(shù)據(jù)在數(shù)據(jù)塊中的存儲位置。
九、i 節(jié)點
i 節(jié)點是一個 64 字節(jié)長的表,表中包含了文件的相關信息,是文件系統(tǒng)中非常重要的數(shù)據(jù)結(jié)構(gòu)。其中包含了文件的大小、文件所有者、文件的存取許可方式以及文件的類型等重要信息。通過 i 節(jié)點,文件系統(tǒng)可以快速地定位和管理文件的屬性和數(shù)據(jù)存儲位置。每個文件都有一個唯一的 i 節(jié)點,文件系統(tǒng)通過 i 節(jié)點來區(qū)分不同的文件。
十、Linux 文件類型
在 Linux 系統(tǒng)中,文件可以分為多種類型,不同類型的文件具有不同的特點和用途,通過文件的屬性可以進行區(qū)分:
普通文件 | - |
包含數(shù)據(jù)、程序代碼等內(nèi)容的文件,如文本文件、可執(zhí)行文件等。 |
目錄 | d |
用于組織和管理文件和目錄的特殊文件,類似于 Windows 系統(tǒng)中的文件夾。目錄中包含了文件和子目錄的信息。 |
字符設備文件 | c |
用于表示字符設備,如串口、終端等,這些設備以字符流的方式進行數(shù)據(jù)傳輸。 |
塊設備文件 | b |
用于表示塊設備,如硬盤、磁盤分區(qū)等,這些設備以塊為單位進行數(shù)據(jù)存儲和傳輸。 |
符號鏈接文件 | l |
也稱為軟鏈接,是一種特殊的文件,它指向另一個文件或目錄,類似于快捷方式。 |
套接字文件 | s |
用于實現(xiàn)進程間的網(wǎng)絡通信,是網(wǎng)絡編程中常用的文件類型。 |
管道文件 | p |
用于實現(xiàn)進程間的通信,分為匿名管道和有名管道,是一種半雙工的通信方式。 |
十一、Linux 常用系統(tǒng)調(diào)用函數(shù)
Linux 系統(tǒng)提供了豐富的系統(tǒng)調(diào)用函數(shù),用于實現(xiàn)各種系統(tǒng)功能,這些函數(shù)是用戶空間程序與內(nèi)核進行交互的接口。根據(jù)功能的不同,可以將系統(tǒng)調(diào)用函數(shù)分為以下幾類:
(一)進程控制函數(shù)
進程控制函數(shù)用于管理進程的生命周期,包括進程的創(chuàng)建、運行、終止等操作:
fork |
創(chuàng)建一個新進程,新進程是原進程的副本,父子進程共享部分資源,如代碼段等。 |
clone |
按指定條件創(chuàng)建子進程,可以更靈活地控制子進程的資源共享和行為。 |
execve |
運行可執(zhí)行文件,用新的程序替換當前進程的內(nèi)存空間,實現(xiàn)程序的執(zhí)行。 |
exit |
中止進程,在終止進程前會進行一些清理工作,如關閉文件描述符、釋放資源等。 |
_exit |
立即中止當前進程,不會進行過多的清理工作,直接結(jié)束進程的運行。 |
getdtablesize |
獲取進程所能打開的最大文件數(shù),用于限制進程對文件的訪問數(shù)量。 |
getpgid |
獲取指定進程組標識號,用于管理進程組的相關操作。 |
setpgid |
設置指定進程組標志號,用于改變進程所屬的進程組。 |
getpgrp |
獲取當前進程組標識號,返回當前進程所屬的進程組 ID。 |
setpgrp |
設置當前進程組標志號,將當前進程設置為新的進程組組長。 |
getpid |
獲取進程標識號,返回當前進程的唯一 ID。 |
getppid |
獲取父進程標識號,返回當前進程的父進程的 ID。 |
getpriority |
獲取調(diào)度優(yōu)先級,用于了解進程在系統(tǒng)中的調(diào)度優(yōu)先級。 |
setpriority |
設置調(diào)度優(yōu)先級,調(diào)整進程在系統(tǒng)中的調(diào)度優(yōu)先級,影響進程獲取 CPU 資源的機會。 |
modify_ldt |
讀寫進程的本地描述表,用于管理進程的內(nèi)存訪問權(quán)限等信息。 |
nanosleep |
使進程睡眠指定的時間,以納秒為單位,用于實現(xiàn)精確的時間延遲。 |
nice |
改變分時進程的優(yōu)先級,調(diào)整進程在分時系統(tǒng)中的調(diào)度優(yōu)先級。 |
pause |
掛起進程,等待信號,直到進程接收到一個信號才會繼續(xù)執(zhí)行。 |
personality |
設置進程運行域,用于指定進程的運行環(huán)境和行為。 |
prctl |
對進程進行特定操作,如設置進程的屬性、獲取進程的狀態(tài)等。 |
ptrace |
進程跟蹤,用于調(diào)試和監(jiān)控其他進程的運行情況。 |
sched_get_priority_max |
取得靜態(tài)優(yōu)先級的上限,了解系統(tǒng)中進程優(yōu)先級的最大值。 |
sched_get_priority_min |
取得靜態(tài)優(yōu)先級的下限,了解系統(tǒng)中進程優(yōu)先級的最小值。 |
sched_getparam |
取得進程的調(diào)度參數(shù) |
sched_getscheduler |
取得指定進程的調(diào)度策略 |
sched_rr_get_interval |
取得按RR算法調(diào)度的實時進程的時間片長度 |
sched_setparam |
設置進程的調(diào)度參數(shù) |
sched_setscheduler |
設置指定進程的調(diào)度策略和參數(shù) |
sched_yield |
進程主動讓出處理器,并將自己放入調(diào)度隊列隊尾 |
vfork |
創(chuàng)建一個子進程,以供執(zhí)行新程序,常與 execve 等同時使用 |
wait |
等待子進程終止 |
wait3 |
參見 wait |
waitpid |
等待指定子進程終止 |
wait4 |
參見 waitpid |
capget |
獲取進程權(quán)限 |
capset |
設置進程權(quán)限 |
getsid |
獲取會話標識號 |
setsid |
設置會話標識號 |
以下是對上一部分內(nèi)容的繼續(xù)完善,涵蓋了剩余的系統(tǒng)調(diào)用函數(shù)分類以及其他重要的 Linux 軟件開發(fā)知識點:
(二)文件操作函數(shù)
文件操作函數(shù)用于對文件進行各種操作,包括打開、關閉、讀寫、定位等:
fcntl |
文件控制,可用于設置文件的各種屬性,如文件描述符標志、文件狀態(tài)標志等。 |
open |
打開文件,返回一個文件描述符,用于后續(xù)對文件的操作??梢灾付ù蜷_文件的模式(如只讀、讀寫等)和權(quán)限。 |
creat |
創(chuàng)建新文件,如果文件已存在則截斷其內(nèi)容。可以指定文件的權(quán)限。 |
close |
關閉文件描述字,釋放與文件相關的資源,如文件句柄等。 |
read |
從文件中讀取數(shù)據(jù),將數(shù)據(jù)讀取到指定的緩沖區(qū)中。返回實際讀取的字節(jié)數(shù)。 |
write |
向文件中寫入數(shù)據(jù),將緩沖區(qū)中的數(shù)據(jù)寫入到文件中。返回實際寫入的字節(jié)數(shù)。 |
readv |
從文件讀入數(shù)據(jù)到緩沖數(shù)組中,適用于從文件中讀取多個不連續(xù)的數(shù)據(jù)塊。 |
writev |
將緩沖數(shù)組里的數(shù)據(jù)寫入文件,適用于向文件中寫入多個不連續(xù)的數(shù)據(jù)塊。 |
pread |
對文件進行隨機讀,在不改變文件當前偏移量的情況下,從指定位置讀取數(shù)據(jù)。 |
pwrite |
對文件進行隨機寫,在不改變文件當前偏移量的情況下,向指定位置寫入數(shù)據(jù)。 |
lseek |
移動文件指針,調(diào)整文件的當前偏移量,用于隨機訪問文件中的數(shù)據(jù)。 |
_llseek |
在 64 位地址空間里移動文件指針,用于處理大文件的偏移量操作。 |
dup |
復制已打開的文件描述字,返回一個新的文件描述符,指向同一個文件。 |
dup2 |
按指定條件復制文件描述字,可以將一個文件描述符復制到另一個指定的文件描述符上。 |
flock |
文件加/解鎖,用于實現(xiàn)對文件的獨占或共享訪問控制,避免多個進程同時修改文件導致數(shù)據(jù)不一致。 |
poll |
I/O 多路轉(zhuǎn)換,用于監(jiān)視多個文件描述符的狀態(tài),當其中一個或多個文件描述符準備好進行 I/O 操作時,函數(shù)返回。 |
truncate |
截斷文件,將文件的長度縮短到指定的長度。如果文件長度大于指定長度,則截斷超出部分;如果文件長度小于指定長度,則文件大小不變。 |
ftruncate |
與 truncate 類似,只不過操作的是已打開的文件。 |
umask |
設置文件權(quán)限掩碼,用于控制新創(chuàng)建文件的默認權(quán)限。 |
fsync |
把文件在內(nèi)存中的部分寫回磁盤,確保文件的數(shù)據(jù)已實際寫入磁盤,而不是僅僅存在于內(nèi)存緩沖區(qū)中。 |
(三)文件系統(tǒng)操作函數(shù)
文件系統(tǒng)操作函數(shù)用于對文件系統(tǒng)進行管理,包括目錄操作、文件權(quán)限設置、文件系統(tǒng)信息獲取等:
access |
確定文件的可存取性,檢查當前進程是否具有對指定文件的讀、寫或執(zhí)行權(quán)限。 |
chdir |
改變當前工作目錄,將當前進程的工作目錄切換到指定的目錄。 |
fchdir |
與 chdir 類似,只不過操作的是通過文件描述符指定的目錄。 |
chmod |
改變文件方式,設置文件的訪問權(quán)限,如讀、寫、執(zhí)行權(quán)限等。 |
fchmod |
與 chmod 類似,只不過操作的是已打開的文件。 |
chown |
改變文件的屬主或用戶組,將文件的所有權(quán)或所屬用戶組更改為指定的用戶或用戶組。 |
fchown |
與 chown 類似,只不過操作的是已打開的文件。 |
lchown |
與 chown 類似,但是在處理符號鏈接時,操作的是符號鏈接本身,而不是其指向的文件。 |
chroot |
改變根目錄,將當前進程的根目錄更改為指定的目錄,常用于創(chuàng)建一個隔離的文件系統(tǒng)環(huán)境。 |
stat |
取文件狀態(tài)信息,獲取文件的詳細屬性,如文件大小、修改時間、權(quán)限等。 |
lstat |
與 stat 類似,但是在處理符號鏈接時,返回的是符號鏈接本身的屬性,而不是其指向的文件的屬性。 |
fstat |
與 stat 類似,只不過操作的是已打開的文件。 |
statfs |
取文件系統(tǒng)信息,獲取文件系統(tǒng)的相關信息,如總?cè)萘?、可用空間等。 |
fstatfs |
與 statfs 類似,只不過操作的是已打開的文件所在的文件系統(tǒng)。 |
readdir |
讀取目錄項,用于讀取目錄中的文件和子目錄信息。 |
getdents |
也是用于讀取目錄項,與 readdir 功能類似。 |
mkdir |
創(chuàng)建目錄,在文件系統(tǒng)中創(chuàng)建一個新的目錄。 |
mknod |
創(chuàng)建索引節(jié)點,用于創(chuàng)建特殊文件,如設備文件等。 |
rmdir |
刪除目錄,刪除一個空目錄。如果目錄不為空,則無法刪除。 |
rename |
文件改名,將文件或目錄重命名為指定的名稱。 |
link |
創(chuàng)建鏈接,創(chuàng)建一個硬鏈接,指向指定的文件。 |
symlink |
創(chuàng)建符號鏈接,創(chuàng)建一個軟鏈接,指向指定的文件或目錄。 |
unlink |
刪除鏈接,刪除指定的硬鏈接或文件。如果是符號鏈接,則刪除符號鏈接本身。 |
readlink |
讀符號鏈接的值,獲取符號鏈接指向的目標文件或目錄的路徑。 |
mount |
安裝文件系統(tǒng),將文件系統(tǒng)掛載到指定的掛載點,使得文件系統(tǒng)可以被訪問。 |
umount |
卸下文件系統(tǒng),卸載已掛載的文件系統(tǒng),使其不再可訪問。 |
ustat |
取文件系統(tǒng)信息,獲取文件系統(tǒng)的狀態(tài)信息,如磁盤使用情況等。 |
utime |
改變文件的訪問修改時間,設置文件的最后訪問時間和最后修改時間。 |
utimes |
與 utime 類似,用于設置文件的時間戳。 |
quotactl |
控制磁盤配額,用于管理用戶或用戶組在文件系統(tǒng)上的磁盤使用限制。 |
(四)系統(tǒng)控制函數(shù)
系統(tǒng)控制函數(shù)用于對系統(tǒng)進行各種控制操作,如設置系統(tǒng)參數(shù)、獲取系統(tǒng)信息、控制設備等:
ioctl |
I/O 總控制函數(shù),用于對設備進行各種控制操作,如設置設備參數(shù)、獲取設備狀態(tài)等。 |
_sysctl |
讀/寫系統(tǒng)參數(shù),用于讀取和修改系統(tǒng)的內(nèi)核參數(shù),如網(wǎng)絡參數(shù)、內(nèi)存參數(shù)等。 |
acct |
啟用或禁止進程記賬,用于記錄進程的資源使用情況,如 CPU 時間、內(nèi)存使用等。 |
getrlimit |
獲取系統(tǒng)資源上限,獲取進程對某種系統(tǒng)資源(如文件描述符數(shù)量、內(nèi)存大小等)的限制。 |
setrlimit |
設置系統(tǒng)資源上限,設置進程對某種系統(tǒng)資源的限制。 |
getrusage |
獲取系統(tǒng)資源使用情況,獲取進程或系統(tǒng)的資源使用統(tǒng)計信息,如 CPU 時間、內(nèi)存使用等。 |
uselib |
選擇要使用的二進制函數(shù)庫,用于指定進程使用特定的函數(shù)庫。 |
ioperm |
設置端口 I/O 權(quán)限,設置進程對特定端口的 I/O 訪問權(quán)限。 |
iopl |
改變進程 I/O 權(quán)限級別,提升或降低進程的 I/O 權(quán)限級別,使其能夠訪問特定的 I/O 端口。 |
outb |
低級端口操作,用于對端口進行低級的讀寫操作。 |
reboot |
重新啟動,用于重新啟動系統(tǒng)。 |
swapon |
打開交換文件和設備,啟用交換空間,將內(nèi)存中的數(shù)據(jù)交換到磁盤上,以釋放內(nèi)存空間。 |
swapoff |
關閉交換文件和設備,禁用交換空間,將磁盤上的交換數(shù)據(jù)換回內(nèi)存。 |
bdflush |
控制 bdflush 守護進程,用于管理磁盤緩沖區(qū)的刷新操作,確保數(shù)據(jù)及時寫入磁盤。 |
sysfs |
取核心支持的文件系統(tǒng)類型,獲取內(nèi)核支持的文件系統(tǒng)類型列表。 |
sysinfo |
取得系統(tǒng)信息,獲取系統(tǒng)的基本信息,如內(nèi)存大小、CPU 數(shù)量等。 |
adjtimex |
調(diào)整系統(tǒng)時鐘,用于調(diào)整系統(tǒng)的時間和時間間隔。 |
alarm |
設置進程的鬧鐘,設置一個定時器,在指定的時間后向進程發(fā)送 SIGALRM 信號。 |
getitimer |
獲取計時器值,獲取進程中指定類型的計時器的值。 |
setitimer |
設置計時器值,設置進程中指定類型的計時器的值和選項。 |
gettimeofday |
取時間和時區(qū),獲取當前的時間和時區(qū)信息。 |
settimeofday |
設置時間和時區(qū),設置系統(tǒng)的時間和時區(qū)。 |
stime |
設置系統(tǒng)日期和時間,設置系統(tǒng)的日期和時間。 |
time |
取得系統(tǒng)時間,返回當前的系統(tǒng)時間,以秒為單位。 |
times |
取進程運行時間,獲取進程的用戶時間、系統(tǒng)時間和總運行時間。 |
uname |
獲取當前 UNIX 系統(tǒng)的名稱、版本和主機等信息,返回系統(tǒng)的標識信息。 |
vhangup |
掛起當前終端,掛起當前的終端會話。 |
nfsservctl |
對 NFS 守護進程進行控制,用于管理 NFS 服務器的守護進程,如啟動、停止、重新加載等操作。 |
vm86 |
進入模擬 8086 模式,使進程進入模擬 8086 處理器的模式,用于兼容一些舊的軟件。 |
create_module |
創(chuàng)建可裝載的模塊項,用于創(chuàng)建一個可裝載的內(nèi)核模塊。 |
delete_module |
刪除 |
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
一些八股模擬拷打Point,萬一有點用呢