Linux環境程式設計檔案系統下

2021-10-09 18:26:39 字數 3864 閱讀 9154

檔案同步:

1、在寫入資料時記憶體與磁碟之間也有乙個緩衝區,這種機制降低了磁碟讀寫次數,提高了讀寫的效率。

2、但這種機制帶來的後果就是磁碟中的資料與實寫入的資料不匹配,系統提供了乙個函式可以讓緩衝區中的資料立即寫入到磁碟。

void sync(void);

功能:把緩衝區中的資料同步到磁碟

注意:並不等到資料同步完成後才返回,而是把緩衝區的資料加入到寫入佇列。

int fsync(int fd);

功能:把指定檔案的內容從緩衝區同步到磁碟

注意:會等到完全定稿磁碟才返回

int fdatasync(int fd);

功能:把指定檔案的內容從緩衝區同步到磁碟,只同步檔案的內容不同步屬性。

檔案屬性:

int stat(const char *path, struct stat *buf);

功能:根據檔案的路徑獲取檔案的屬性

buf:儲存檔案屬性的結構休指標,是個輸出型引數。

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

功能:根據檔案描述符獲取檔案的屬性

struct stat

// 計算檔案現有的位元組數

int len =

lseek

(fd,0,

seek_end);

// 如果m和值大於len,則把m改len

if(m > len) m = len;

// 檢查範圍是否合法

if(m <= n)

return-1

;// 計算出刪除後的位元組數

len -

=(m-n)

;// 把m後的資料向前拷貝

int ret =0;

char buf[

4096]=

;lseek

(fd,m,

seek_set);

while

(ret =

read

(fd,buf,

sizeof

(buf)))

// 擷取檔案的長度

ftruncate

(fd,len)

;close

(fd);}

intmain

(int argc,

const

char

* ar**)

刪除和重新命名:

int remove(const char *pathname);

功能:標準庫中刪除檔案函式,底層呼叫的是unlink

int unlink(const char *pathname);

功能:刪除硬鏈結檔案

int rename(const char *oldpath, const char *newpath);

鏈結檔案:

int link(const char *oldpath, const char *newpath);

功能:建立硬鏈結檔案

int symlink(const char *oldpath, const char *newpath);

功能:建立軟體鏈結檔案

ssize_t readlink(const char *path, char *buf, size_t bufsiz);

功能:只讀取軟鏈結檔案本身,而非鏈結目標,讀取的內容就是鏈結目錄的路徑

目錄操作:

int mkdir(const char *pathname, mode_t mode);

功能:建立目錄

mode:目錄的許可權,注意必須要有執行許可權,否則無法進入

int rmdir(const char *pathname);

功能:刪除空目錄

int chdir(const char *path);

功能:進入目錄,相當於cd命令

char *getcwd(char *buf, size_t size);

功能:獲取當前目錄,相當於pwd命令

dir *opendir(const char *name);

功能:開啟檔案檔案,返回乙個目錄流

struct dirent *readdir(dir *dirp);

功能:從目錄流中讀取一條記錄

struct dirent

}void

file_mode

(mode_t mode)

void

user_name

(uid_t uid)

void

group_name

(gid_t gid)

void

show_time

(time_t mtime)

void

list_file_stat

(const

char

* path)

// 顯示檔案型別

file_type

(buf.st_mode)

;// 顯示檔案許可權

file_mode

(buf.st_mode)

;// 顯示目錄層數

printf

(" %c"

,s_isdir

(buf.st_mode)

?'2'

:'1');

// 顯示使用者名稱

user_name

(buf.st_uid)

;// 顯示組名

group_name

(buf.st_gid)

;// 顯示位元組數

printf

(" %lu"

,buf.st_size)

;// 顯示最後修改時間

show_time

(buf.st_mtime)

;// 顯示檔名

printf

(" %s\n"

,path);}

intmain

(int argc,

const

char

* ar**)

練習3:實現rm -rf的功能。(實現這個功能之前最好先備份一下,別問我為什麼)

#include

#include

#include

#include

#include

#include

#include

void

rm_rf_dir

(const

char

* buf)

;getcwd

(pwd,

sizeof

(pwd));

// 設定工作目錄if(

chdir

(buf)

)return

;printf

("-------------------------\n");

dir* dir =

opendir

(".");

for(

struct dirent* d=

readdir

(dir)

;null

!=d; d=

readdir

(dir)

)else

unlink

(d->d_name);}

// 還原工作目錄

chdir

(pwd)

;printf

("%d\n"

,rmdir

(buf));

}int

main

(int argc,

const

char

* ar**)

rm_rf_dir

(ar**[1]

);}

linux環境下使用GFS檔案系統

gfs檔案系統其實是乙個網路日誌檔案系統,通常被用作多台計算機共享同一儲存裝置。由於gfs是日誌檔案系統,所以,如果將其應用到單獨的一台計算機上,即完全等同於 本地日誌檔案系統,享受日誌檔案系統帶來的好處。本文便向各位簡介gfs檔案系統在linux環境下的使用。gfs檔案系統1 編譯核心回答一大串的...

linux環境下使用GFS檔案系統

gfs檔案系統其實是乙個網路日誌檔案系統,通常被用作多台計算機共享同一儲存裝置 gfs檔案系統其實是乙個網路日誌檔案系統,通常被用作多台計算機共享同一儲存裝置。由於 gfs是日誌檔案系統,所以,如果將其應用到單獨的一台計算機上,即完全等同於 本地日誌檔案系統,享受日誌檔案系統帶來的好處。本文便向各位...

Linux環境下使用JFS檔案系統

jfs提供了基於日誌的位元組級檔案系統,該檔案系統是為面向事務的高效能系統而開發的。jfs 能夠在幾秒或幾 分鐘內就把檔案系統恢復到一致狀態。jfs能夠保證資料在任何意外宕機的情況下,不會造成磁碟資料的丟失與損壞。一 jfs檔案系統特點 1 儲存空間更大 jfs 支援的最小檔案系統是 16m 位元組...