標籤:style blog http color os 使用 ar 檔案 2014
1. 建立
int creat(const char *filename, mode_t mode);
參數mode指定檔案的存取許可權,mode同umask一起決定檔案的最終許可權(mode&umask),umask代表了檔案在建立時需要去掉的一些存取許可權。
umask可通過系統調用umask()來改變:
int umask(int newmask);
該調用將umask設定為newmask,函數返回舊的umask許可權,它隻影響讀,寫和執行的許可權。
2. 開啟
int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);
open()函數有兩種方式,其中pathname是檔案路徑名,預設預設為當前路徑下。
flags表示如下:
O_RDONLY, O_WRONLY, O_RDWR三個標誌只能使用其中的一個,
如果使用了O_CREAT標誌,則使用函數必須指定mode用來表示檔案的存取權限,
int open(const char *pathname, O_CREAT, mode_t mode);
mode表示如下:
3. 讀寫
檔案open後我們返回一個fd(檔案描述符),我們通過檔案描述符才能進行讀寫,
int read(int fd, const void *buf, size_t length);int write(int fd, const void *buf, size_t length);
其中buf為指向緩衝區的指標,length為緩衝區的大小(以位元組為單位)。
函數read()實現從檔案描述符fd所指定的檔案中讀取length個位元組到buf所指向的緩衝區中,傳回值為實際讀取的位元組數。
函數write()實現將length個位元組,從buf所指向的緩衝區中寫入到檔案描述符fd所指向的檔案中,傳回值為實際寫入的位元組數。
4. 定位
對於隨機檔案,我們可以隨機的指定位置讀寫,可使用如下函數進行定位:
int lseek(int fd, offset_t offset, int whence);
lseek()將檔案讀寫指標相對whence移動offset個位元組。操作成功,返迴文件指標相對於檔案頭的位置。
參數whence可使用下述值:
SEEK_SET: 相對檔案開頭
SEEK_CUR: 相對檔案讀寫指標的當前位置
SEEK_END: 相對檔案末尾
offset可取負值,lseek(fd,-5,SEEK_CUR)檔案指標相對於當前位置向前移動5個位元組。
由於lseek函數返迴文件開頭到當前指標的位元組長度,所以lseek(fd, 0, SEEK_END)返回的就是整個檔案長度。
5. 關閉
int close(int fd);
Linux的檔案操作