headerfile: #include <fcntl.h>
用法: int open(const char *pathname, int flags);
or int open(const char *pathname, int flags, mode_t mode);
O_RDONLY
讀、O_WRONLY
寫、O_RDWR
讀寫 (三者需擇一)O_CREAT
製造檔案 (選用)O_APPEND
資料加到檔案最後面O_TRUNC
將檔案大小歸0,可以保證不會有舊資料O_CLOEXEC
使用execve時自動關閉檔案S_IRWXU
檔案擁有者可讀、寫、執行S_IRUSR
檔案擁有者可讀S_IWUSR
檔案擁有者可寫S_IXUSR
檔案擁有者可執行open(fileName,O_RDONLY);
int close(int fd)
close(fileFd)
header file: #include <unistd.h>
用法: ssize_t read(int fd, void *buf, size_t len)
用法: ssize_t write(int fd, const void *buf, size_t len);
用法: void perror(const char *s);
erron :
系統內的錯誤訊息代碼,發生錯誤時會把錯誤寫入
改變檔案指標位置
header file: #include <unistd.h>
用法: off_t lseek(fd, offset, WHENCE)
lseek(fd,0,SEEK_END);
從後面算起0個#define _GNU_SOURSE
off_t lseek(fd, offset, WHENCE)
void sync(void);
把全部資料(包含meta-data)寫回硬碟int fsync(int fd);
將fd代表的檔案(包含meta-data)寫回硬碟int fdatasync(int fd);
將fd代表的檔案(不包含meta-data)寫回硬碟(速度較快)meta-data :
ex : 修改日期、檔案大小等
整個檔案全部上鎖,可多人同時讀
#include<sys/file.h>
int flock(int fd, int operation);
LOCK_SH
(share) 可以多個人同時(共享鎖)LOCK_EX
(exclusive) 只能一人(排他鎖)LOCK_UN
(unlock)可以對檔案的一部份上鎖,只能一人讀(只有排他鎖,無共享鎖)
#include<sys/file.h>
int lockf(int fd, int cmd, off_t len);
F_LOCK
加鎖F_ULOCK
解鎖F_TEST
測試是否被上鎖,沒被上鎖回傳0,被上鎖回傳-1使用強制鎖前需先下以下指令:
sudo mount -oremount.mand /
啟動強制鎖
chmod g+s filename
chmod g-x filename