Linux 檔案操作函式 使用者核態切換

2021-09-10 03:59:30 字數 2720 閱讀 5281

(一)檔案操作函式

(1)open:建立了一條到檔案或裝置的訪問路徑,成功將返回乙個可被read、write其他系統呼叫使用的檔案描述符。

#include#include#includeint open(char*dpath,int flag, /*mode_t mode*/):

成功返回新得檔案描述符,失敗返回-1並設定全域性變數errno指明失敗原因

檔案描述符唯一,不與其他程序共享。若兩個程式同時開啟乙個檔案,他們會分別得到兩個不同的檔案描述符,都對檔案進行寫操作,會各寫各的不會,分別接著上次離開的位置往下寫,不會交織,而是覆蓋.

flag引數:必須檔案訪問模式 + 可選模式(用按位或操作)

使用帶o_creat標誌建立檔案必須使用帶mode引數的open函式,mode是幾個標誌「按位或」後得到的。

例如:

open(「myfile」,o_caret,s_irusr|s_ixoth);

建立myfile檔案,檔案屬主用於讀許可權,其他使用者擁有執行許可權,且只設定了這些許可權。

對訪問許可權產生影響的因素有兩種:

指定訪問許可權在建立時才會使用;

使用者掩碼(uamsk)

舉例:使用者雅掩碼為001,並且指定s_ixoth,那麼其他使用者不會擁有執行許可權,因為umask不允許。所以open、create呼叫中的標誌實際上是發出設定請求,決定權在umask的值。

umask:系統變數。作用是當檔案建立時為檔案的訪問許可權設定乙個掩碼。

由三個數組成:使用者(user)組(grap)其他使用者(other;每個數字有四種選擇:0(任何許可權)4(讀許可權)2(寫許可權)1(執行許可權)。

(2)create:建立乙個新檔案

#includeint creat(const char *pathname, mode_t mode);

返回值:成功返回為只寫開啟的檔案描述符,出錯返回-1

次函式等效於:

open(pathname,o_wronly|o_creat|o_trunc,mode);

#includesize_t read(int fildes,void *buf,size_t nbytes);
#includesize_t write(int fildes,void *buf,size_t nbytes);
(4)close:終止檔案描述符fildes與其對應檔案之間的關聯。檔案描述符被釋放並能夠重新使用。

#includeint close(int fildes);

成功返回0,失敗返回-1

父程序開啟的檔案子程序也能共享。

#include#include off_t lseek(int fildes,off_t offset,int whence);

成功返回檔案頭到檔案指標被設定處的位元組偏移值,失敗返回-1。

off引數用來指定位置:

whence引數:定義該偏移值用法

seek_set:offset是乙個絕對位置

seek_cur:offset是乙個相對於當前位置的乙個相對位置

seek_end:offset是乙個相對於檔案尾的乙個相對位置。

(二)獲取檔案屬性函式

#include#includeint stat(const char *restric pathname,struct stat* restruct buf);

int fstat(int fildes,struct stat* buf);

int lstat(const char *restric pathname,struct stat* restruct buf);

三個函式的返回值:若成功則返回0,若出錯則返回-1

一旦給出pathname,stat函式就返回與此命名檔案有關的資訊結構。fstat函式獲取已在描述符filedes上開啟檔案的有關資訊。lstat含稅類似於stat,但是當命名的檔案是乙個符號鏈結時,lstat返回該符號鏈結的有關資訊,而不是由該符號鏈結引用檔案的資訊。

(三)掃瞄目錄函式

(二)系統呼叫函式&庫函式

系統呼叫函式:系統核心丟擲來給使用者空間呼叫的介面。系統呼叫函式由使用者態呼叫,在核心態執行。

庫函式:在庫函式實現,在使用者態呼叫,執行時在使用者態執行。但是有些庫函式需要想換掉系統呼叫函式。

庫函式與系統呼叫函式的區別:

(三)核心態&使用者態

核心態:作業系統核心空間,擁有作業系統最高許可權。

使用者態:使用者空間,最低許可權。

以open系統呼叫函式為例:

linux使用者態與核心態通訊及如何編寫核心模組

通訊方式 procfs socket syscall ioctl 常用的是socket syscall ioctl.ioctl機制,ioctl機制可以在驅動中擴充套件特定的ioctl訊息,用於將一些狀態從核心反應到使用者態。ioctl有很好的資料同步保護機制,不要擔心核心和使用者層的資料訪問衝突,但...

計算機原理 怎樣去理解Linux使用者態和核心態?

在linux技術討論中經常會使用者態和核心態術語脫口而出,可你們想過嗎?使用者態和核心態代表是什麼?本片文章,就來談一談這個話題。我們先來看一張linux整體架構圖。從圖上我們可以看出來通過系統呼叫將linux整個體系分為使用者態和核心態 或者說核心空間和使用者空間 那核心態到底是什麼呢?其實從本質...

linux核心態使用者態

概述 linux系統使用者態和核心態相關知識,linux核心版本為3.10.79。使用者態和核心態定義 核心態 cpu可以訪問記憶體所有資源,包括外圍裝置.可以進行處理器工作模式切換,程式的切換。使用者態 只能受限的訪問記憶體,且不允許訪問外圍裝置,不可以進行處理器模式切換。為什麼分使用者態和核心態...