作業系統 檔案相關的函式

2021-10-23 19:30:05 字數 4600 閱讀 8560

檔案同步:

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);

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

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

struct stat {

dev_t st_dev; // 裝置id

ino_t st_ino; // i節點號

mode_t st_mode; // 檔案的型別和許可權

nlink_t st_nlink; // 硬鏈結數

uid_t st_uid; // 使用者id

gid_t st_gid; // 組id

dev_t st_rdev; // 特殊裝置id號

off_t st_size; // 總位元組數

blksize_t st_blksize; // io塊位元組數

blkcnt_t st_blocks; // 占用512位元組塊數

time_t st_atime; // 最後訪問時間

time_t st_mtime; // 最後內容修改時間

time_t st_ctime; // 最後狀態修改時間

st_mode

s_isreg(m) 普通檔案

s_isdir(m) 目錄檔案

s_ischr(m) 字元裝置檔案

s_isblk(m) 塊裝置檔案

s_isfifo(m) 管道檔案

s_islnk(m) 軟鏈結檔案

s_issock(m) socket檔案

s_ifmt 0170000 獲取檔案型別的掩碼

s_ifsock 0140000 socket檔案

s_iflnk 0120000 軟鏈結檔案

s_ifreg 0100000 普通檔案

s_ifblk 0060000 塊裝置檔案

s_ifdir 0040000 目錄檔案

s_ifchr 0020000 字元裝置檔案

s_ififo 0010000 管道檔案

s_isuid 0004000 設定使用者id

s_isgid 0002000 設定組id

s_isvtx 0001000 sticky bit (see below)

s_irwxu 00700 使用者許可權掩碼

s_irusr 00400

s_iwusr 00200

s_ixusr 00100

s_irwxg 00070 組許可權掩碼

s_irgrp 00040

s_iwgrp 00020

s_ixgrp 00010

s_irwxo 00007 其他使用者許可權掩碼

s_iroth 00004

s_iwoth 00002

s_ixoth 00001

檔案的許可權:

int access(const char *pathname, int mode);

功能:測試當前使用者對檔案的許可權

pathname:檔案的路徑

mode:想測試的許可權

返回值:存在返回0,不存在返回-1。

f_ok 檔案是否存在

w_ok 寫許可權

r_ok 讀許可權

x_ok 執行許可權

int chmod(const char *path, mode_t mode);

功能:根據檔案的路徑修改檔案許可權

path:檔案的路徑

mode:由三個8進行組成的許可權碼

0644 普通檔案

0755 可執行檔案

int fchmod(int fd, mode_t mode);

功能:根據檔案描述符修改檔案的許可權

fd:檔案描述符

mode_t umask(mode_t mask);

功能:設定當前程序的許可權遮蔽碼

mask:想要設定的許可權遮蔽碼

返回值:舊的許可權螢幕碼

注意:許可權遮蔽碼預設是當前終端的,該函式的設定只對當前程序有效,進行結束後就失效了。

許可權遮蔽碼:

如果我們不讓新建立的檔案具有某些許可權,可以設定許可權過濾,記錄在許可權遮蔽碼中。

許可權遮蔽碼對於chmod命令和函式是無效。

修改檔案的大小

int truncate(const char *path, off_t length);

功能:根據檔案路徑修改檔案的大小

length:想要修改的的位元組數

int ftruncate(int fd, off_t length);

功能:根據檔案描述符修改檔案的大小

length:想要修改的的位元組數

練習1:實現乙個函式,可以刪除檔案的[n,m)個位元組。

int del_file(const char* path ,size_t n,size_t m);

刪除和重新命名:

int remove(const char *pathname);

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

int unlink(const char *pathname);

int rename(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 {

ino_t d_ino; // i節點編號

off_t d_off; // 下乙個條目的偏移量

unsigned short d_reclen; // 當前條目的長度

unsigned char d_type; // 檔案型別

dt_blk 塊裝置檔案

dt_chr 字元裝置檔案

dt_dir 目錄檔案

dt_fifo 管道檔案

dt_lnk 軟鏈結檔案

dt_reg 普通檔案

dt_sock socket檔案

dt_unknown 未知型別

char d_name[256]; // 檔名

int closedir(dir *dirp);

功能:關閉目錄流

void seekdir(dir *dirp, long offset);

功能:設定目錄流的位置指標,用於隨機讀取

void rewinddir(dir *dirp);

功能:設定目錄流的位置指標到開頭

long telldir(dir *dirp);

功能:獲取目錄流的位置指標

作業系統檔案儲存相關

檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個 塊 block 這種由多個扇區組成的 塊 是檔案訪問的最小單位。塊 的大小,最常見的是4...

作業系統相關

程序 乙個執行的程式就是乙個程序。是系統資源分配的最小單位,擁有自己獨立的記憶體空間。既不共享堆也不共享棧 由作業系統排程 執行緒 排程執行的最小單位,不能獨立存在,共享記憶體。共享堆不共享棧 由作業系統排程 協程 是一種使用者態的輕量級執行緒,排程完全由使用者控制。和執行緒一樣,共享堆不共享棧 由...

作業系統相關

seo search engine optimization 漢譯為搜尋引擎優化。是一種方式 利用搜尋引擎的規則提高 在有關搜尋引擎內的自然排名。目的是讓其在行業內佔據領先地位,獲得品牌收益。很大程度上是 經營者的一種商業行為,將自己或自己公司的排名前移。作業系統 operating system,...