檔案同步:
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,...