Linux環境程式設計2 持續更新中

2021-10-23 15:53:25 字數 4011 閱讀 9694

檔案同步:

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 {

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:想要修改的的位元組數

刪除和重新命名:

int remove(const char *pathname);

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

int rename(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);

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

linux筆記(更新持續中)

配置主機名 hostnamectl set hostname www.wayne.com 關閉防火牆 systemctl stop firewalld systemctl disable firewalld 關閉selinux vi etc sysconfig selinux setenfoce 0...

linux 出錯,持續更新中

1.網絡卡自動關閉。這個問題出現在,vmware虛擬機器複製上。1 重新配置網絡卡uuid。使用uuidgen命令。問題沒解決。2 重新生成網絡卡配置檔案 nmcli connection type ethernet ifname ens32。重新配置解決問題。2.git localhost scp...

程式設計小 Tips ,持續更新中

任何技能都講究熟能生巧,包括程式設計。但是在敲 的過程中,掌握一些 奇技淫巧 還是可以對提高生產力大有幫助的!下面就記錄下自己學習到的一些小 tips,常用的快捷鍵就不多提了。有些小技巧自己不注意可能永遠不會發現,正如同事所說,有的東西,靠口口相傳!在 ide 中,按住 alt 鍵 拖動滑鼠,可以框...