一、系統程式設計概述
1、什麼是linux系統程式設計
在有作業系統的環境下程式設計,並使用作業系統提供的系統呼叫及各種庫,對系統資源進行訪問。
學會了c語言再知道一些使用系統呼叫的方法,就可以進行linux系統程式設計了。
二、系統呼叫
1、系統呼叫(system call):是
作業系統為在使用者態執行的程序與硬體裝置(如cpu、磁碟、印表機等)進行互動提供的一組介面
。當使用者程序需要發生系統呼叫時,cpu 通過軟中斷切換到核心態開始執行核心系統呼叫函式。
例如:使用者可以通過檔案系統相關的系統呼叫,請求系
統開啟檔案、關閉檔案或讀寫檔案。
2、系統呼叫按照功能邏輯大致可分為:
程序控制、程序間通訊、檔案系統控制、系統控制、記憶體管理、網路管理、socket控制、使用者管理。
3、系統呼叫的返回值:
通常,用乙個
負的返回值來表明錯誤,返回乙個0值表明成功
。錯誤資訊存放在全域性變數errno中,使用者可用perror函式列印出錯資訊。
4、系統呼叫遵循的規範
5、系統呼叫i/o函式
系統呼叫中操作i/o的函式,都是針對檔案描述符的。通過檔案描述符可以直接對相應的檔案進行操作。
如:open、close、write 、read、ioctl
檔案描述符:
檔案描述符是非負整數。開啟現存盤案或新建檔案時,系統(核心)會返回乙個檔案描述符。檔案描述符用來指定已開啟的檔案。
#define stdin_fileno 0
//標準輸入
的檔案描述符
#define stdout_fileno 1
//標準輸出
的檔案描述符
#define stderr_fileno 2
//標準錯誤
的檔案描述符
程式執行起來後這三個檔案描述符是預設開啟的
(1)open函式:開啟乙個檔案
#include
#include
#include
當檔案存在時使用:
int open(const char *pathname, int flags);
當檔案不存在時使用:
int open(const char *pathname, int flags, mode_t mode);
引數:pathname:檔案的路徑及檔名。flags:open函式的行為標誌。
mode:檔案許可權(可讀、可寫、可執行)的設定。
返回值:
成功返回開啟的檔案描述符。失敗返回-1,可以利用perror去檢視原因。
(2)close函式:關閉乙個檔案
#include
int close(int fd);
引數:fd是呼叫open開啟檔案返回的檔案描述符。
返回值:
成功返回0。失敗返回-1,可以利用perror去檢視原因。
(3)write函式:把指定數目的資料寫到檔案
#include
ssize_t write(int fd, const void *addr, size_t count);
引數:fd:檔案描述符。
addr:資料首位址。
count:寫入資料的位元組個數。
返回值:
成功返回實際寫入資料的位元組個數。失敗返回-1,可以利用perror去檢視原因。
(4)read函式:把指定數目的資料讀到記憶體
#include
ssize_t read(int fd, void *addr, size_t count);
引數:fd:檔案描述符。
addr:記憶體首位址。
count:讀取的位元組個數。
返回值:
成功返回實際讀取到的位元組個數。失敗返回-1,可以利用perror去檢視原因。
6、系統呼叫與庫
(1)庫函式由兩類函式組成
不需要呼叫系統呼叫
不需要切換到核心空間即可完成函式全部功能,並且將結果反饋給應用程式,如strcpy、bzero等字串操作函式。
需要呼叫系統呼叫
需要切換到核心空間,這類函式通過封裝系統呼叫去實現相應功能,如printf、fread等。
(2)庫函式與系統呼叫的關係:
並不是所有的系統呼叫都被封裝成了庫函式,系統提供的很多功能都必須通過系統呼叫才能實現。
系統呼叫是需要時間的,程式中頻繁的使用系統呼叫會降低程式的執行效率。
當執行核心**時,cpu工作在核心態,在系統呼叫發生前需要儲存使用者態的棧和記憶體環境,然後轉入核心態工作。
系統呼叫結束後,又要切換回使用者態。這種環境的切換會消耗掉許多時間。
庫函式訪問檔案的時候根據需要,設定不同型別的緩衝區,從而減少了直接呼叫io系統呼叫的次數,提高了訪問效率。
linux 系統程式設計概述
系統程式設計三大基石 系統呼叫,c庫,c編譯器 1.系統呼叫 從作業系統中獲得符合或者資源,又使用者空間向核心發起的函式呼叫,如 read write 等系統呼叫函式 2.c庫 linux 應用程式的核心,glibc 系統呼叫封裝,執行緒支援,基本應用工具 3.c編譯器 gcc 編譯器輔助實現了c標...
Linux系統程式設計 系統呼叫
系統呼叫,顧名思義,說的是作業系統提供給使用者程式呼叫的一組 特殊 介面。使用者程式可以通過這組 特殊 介面來獲得作業系統核心提供的服務,比如使用者可以通過檔案系統相關的呼叫請求系統開啟檔案 關閉檔案或讀寫檔案,可以通過時鐘相關的系統呼叫獲得系統時間或設定定時器等。從邏輯上來說,系統呼叫可被看成是乙...
Linux系統程式設計 Linux系統呼叫
linux 系統呼叫 庫函式 目錄 系統呼叫概述 系統呼叫的實現 系統呼叫和庫函式的區別 系統呼叫,顧名思義,說的是作業系統提供給使用者程式呼叫的一組 特殊 介面。使用者程式可以通過這組 特殊 介面來獲得作業系統核心提供的服務,比如使用者可以通過檔案系統相關的呼叫請求系統開啟檔案 關閉檔案或讀寫檔案...