檔案同步:
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 位元組...