linux系統程式設計概述 系統呼叫

2021-07-11 11:20:52 字數 2547 閱讀 7691

一、系統程式設計概述

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 系統呼叫 庫函式 目錄 系統呼叫概述 系統呼叫的實現 系統呼叫和庫函式的區別 系統呼叫,顧名思義,說的是作業系統提供給使用者程式呼叫的一組 特殊 介面。使用者程式可以通過這組 特殊 介面來獲得作業系統核心提供的服務,比如使用者可以通過檔案系統相關的呼叫請求系統開啟檔案 關閉檔案或讀寫檔案...