opendir --打開目錄,返回DIR*指針,man 3 opendir 查看介紹,下面查看方法類似
readdir --讀取目錄,返回struct dirent*結構體指針(dir entry)
closedir --關閉目錄DIR*
getcwd --獲取當前工作目錄
下面是文件有關的函數:
stat --獲取文件屬性,返回struct stat結構體,包括文件類型,大小修改時間,權限,用戶id等等。能夠透過符號鏈接
lstat --類似stat,但是不能透過符號鏈接,也就是說如果是符號鏈接,就只是讀到符號鏈接屬性,不能讀取到真實文件屬性
access --判斷文件是否有某個權限(R_OK, W_OK, X_OK),也可以使用判斷文件是否存在(F_OK)
chmod --改變文件權限,第二個參數mode必須是一個8進制數,比如0755
chown --改變文件所有者
rename --重命名文件
truncate --截取文件為指定長度,指定長度為0時,清空文件內容。
link --創建一個硬鏈接,
symlink --創建一個符號鏈接
readlink --讀取一個符號鏈接名稱,是文件名稱,不是文件內容,不能讀取硬鏈接
unlink --刪除鏈接,如果是符號鏈接,直接刪除符號鏈接。如果是硬鏈接,硬鏈接數減1,硬鏈接數為0時刪除鏈接,所有也是刪除文件的一種方法。注意:進程退出后才會真正的刪除。
unlink由於需要等到進程退出后才會真正執行刪除,所有一般用於刪除程序運行時產生的臨時文件,程序退出后,臨時文件自動刪除這個場景。
int fd = open("filename", O_CREAT | O_RDWR, 0755); --打開一個文件,不存在時自動創建該文件,返回一個文件描述符
char* p= "this is test file\n";
write(fd, p, strlen(p)); -- strlen計算字符串長度,write寫入文件
close(fd); --關閉文件
fcntl函數:man 3 fcntl查看文檔
int fcntl(int fd, int cmd);
int fcntl(int fd, int cmd, long arg);
int fcntl(int fd, int cmd, struct flock *lock);
cmd有以下幾種情況:
復制文件描述符 -- F_DUPFD
文件描述符標記 -- F_GETFD、F_SETFD
文件狀態 -- F_GETFL、F_SETFL
異步IO所有權 -- F_GETOWN、F_SETOWN (man 3 open 可在open函數里查看所有權限)
文件記錄鎖 -- F_GETLK、F_SETLK、F_SETLKW
int flags = fcntl(fd, F_GETFD);
flags |= FD_CLOEXEC; //設置執行exec系列函數時自動關閉fd文件描述符
fcntl(fd, F_SETFD, flags)