Linux程式設計之系統呼叫

2021-10-03 19:01:49 字數 2204 閱讀 2317

1linux的系統呼叫

系統呼叫system calls

系統呼叫:system calls / linux api

是一些在應用程式裡呼叫的函式,這些函式間接地調 用了os中的功能(呼叫了linux核心的功能)

在地位上,與windows api對等

在本質上,只呼叫了linux kernel

在形式上,如果乙個函式不在任何庫中提供,則它是 系統呼叫。

如,printf不是系統呼叫,它是libc庫中的函式 mkdir是系統呼叫

例如,在命令列中,我們可以用命令

# mkdir testdir

來建立乙個子目錄testdir

那麼,如果我們想在程式中來建立乙個子目錄, 該呼叫哪個函式呢?

man mkdir (1號manual: 命令列的用法)

man 2 mkdir (2號manual: 函式的用法)

(注:mkdir有多條manual,我們檢視2號manual)

.#include

// linux

#include

#include

#include

int main()

參考文件

當我們需在程式中呼叫os的某個功能時,應 該想到用system call函式。

例如,建立目錄

檢視檔案屬性

檢視程序列表

獲取目錄下的所有檔案

如何檢視可用的系統呼叫?

man syscalls

根據函式名,再檢視該函式的幫助

(官網上提供了乙個html格式的文件,是linux1.0版本 系統呼叫,內容不全)

可以發現,以前學的open, close, read, write屬於system call,它們不依賴別的庫,直接由作業系統提供。

而pthread和dl不屬於系統呼叫,它們分別在pthread和 dl庫中提供。

2系統呼叫:讀取目錄

獲取目錄下的內容

本節課進一步示範system call的使用

需求:要求獲取某個目錄下的所有項(檔案/ 子目錄)的名稱。

步驟查詢文件,尋找可用的system call

opendir / readdir / closedir

檢視幫助

man opendir

測試**

測試函式的用法

整合**(封裝)

將測試**整合到目標專案中

3在**中呼叫系統命令

system()

如果有些命令你找不到對應的system call,那麼也可以在**裡直 接呼叫命令列。

system函式用法比較簡單:

int ret = system(「rm ‐rf *.txt」);

其返回值就是所呼叫的命名行的返回值。

注:實際上system函式將建立乙個子程序,並一直等待該程序結 束,該函式才返回。

這意味著,如果子程序要執行1分鐘才返回,那這個函式就會阻塞 1分鐘。如果子程序永不返回,則此函式永遠阻塞。。。

popen()

popen():呼叫某個命令列,並獲取其標準輸出。p代表 pipe

file* fp =popen(「ifconfig」, 「r」);

int n = fread(buf, 1, 512, fp);

pclose(fp);

注意:(1)按linux programmer』s manual, 必須用pclose關閉而不 是fclose。

(2)要用"r",不能用"rb"「rt」,因為它本質上不是普通文 件

popen()

popen在linux是乙個比較有用的函式,可以用 於獲取系統的配置。

有些配置用命令列比較方便,但卻找不到相 應的系統函式,所以只好用popen來讀取其輸 出。

優先找system call,找不到的時候再用popen

注:system是標準c函式

popen/pclose不是標準c函式,是linux下的特 有的函式。 (windows下相應的叫_popen/_pclose)

小結:

1,system()

2,system()

學習資源 [《c語言/c++學習指南》linux開發篇](

/detail/1353)

Linux檔案程式設計之 系統呼叫 open

1 相關函式說明 函式原型 int open const char pathname,int flags int open constchar pathname,int flags,mode t mode 如果使用了o creat標誌,則要使用這個函式,這時需要指定mode來表示檔案的訪問許可權 相...

Linux檔案程式設計之 系統呼叫 close

1 相關函式說明 相關函式 open,fcntl,shutdown,unlink,fclose 表頭檔案 include 定義函式 int close intfd 引數說明 引數fd為先前由open 或creat 所返回的檔案描述詞。當使用完檔案後若已不再需要則可使用close 關閉該檔案,而clo...

Linux檔案程式設計之 系統呼叫 read

1 相關函式說明 函式原型 int read int fd,void buf size t count 相關函式 readdir,write,fcntl,close,lseek,readlink,fread 表頭檔案 include 函式說明 從檔案描述符fd所指定的檔案中,讀取count個位元組,...