c非標準庫參考3 檔案操作篇

2021-07-23 23:44:07 字數 3180 閱讀 2045

#include #include #include int open(const char *file, int oflag, ...);
若所有欲核查的許可權都通過了檢查則返回0,表示成功,只要有乙個許可權被禁止則返回-1。

#include #include #include int creat(const char *pathname, mode_t mode);
creat()相當於使用下列的呼叫方式呼叫open():

open(const char *pathname, (o_creat|o_wronly|o_trunc), mode);

#include int close(int fd);
當使用完檔案後若已不再需要則可使用close()關閉該檔案,close()會讓資料寫回磁碟,並釋放該檔案所占用的資源。引數fd為先前由open()或creat()所返回的檔案描述符。

若檔案順利關閉則返回0,發生錯誤時返回-1。

ebadf 引數fd非有效的檔案描述符或該檔案已關閉。

#include ssize_t read(int fd, void *buf, size_t nbytes);
read nbytes into buf from fd. return the number read, -1 for errors or 0 for eof.

#include ssize_t write(int fd, const void *buf, size_t n);
write n bytes of buf to fd. return the number written, or -1.

#include #include off_t lseek(int fildes, off_t offset, int whence);
return the new file position. 當呼叫成功時則返回目前的讀寫位置,也就是距離檔案開頭多少個位元組。若有錯誤則返回-1,errno會存放錯誤**。

#include int fsync(int fd);

int sync(void);

fsync()負責將引數fd所指的檔案資料,由系統緩衝區寫回磁碟,以確保資料同步。

sync()負責將系統緩衝區資料寫回磁碟,以確保資料同步。

成功則返回0,失敗返回-1,errno為錯誤**。

建議性鎖,只會檢測檔案是否被加鎖。

程序使用flock嘗試鎖檔案時,如果檔案已被其他程序鎖住,程序會被阻塞知道鎖被釋放,或者在呼叫flock的時候採用lock_nb引數,則會返回錯誤,errno錯誤碼為ewouldblock。

檔案被關閉時,鎖會被自動釋放。

#include int mkstemp(char *template);
mkstemp()用來建立唯一的臨時檔案。引數template所指的檔名稱字串中最後六個字元必須是******,並會被mkstemp修改。mkstemp()會以可讀寫模式和0600許可權來開啟該檔案,檔案順利開啟後返回可讀寫的檔案描述詞,若果檔案建立失敗則返回-1,並把錯誤**存在errno中。

einval 引數template字串最後六個字元非******。

eexist 無法建立臨時檔案。

#include int flock(int fd, int operation);
flock()會依引數operation所指定的方式對引數fd所指的檔案做鎖定或解除鎖定的動作。此函式只能鎖定整個檔案,無法鎖定檔案的某一區域。operation有下列四種情況:

lock_sh 建立共享鎖定。多個程序可同時對同乙個檔案作共享鎖定。

lock_ex 建立互斥鎖定。乙個檔案同時只有乙個互斥鎖定。

lock_un 解除檔案鎖定狀態。

lock_nb 無法建立鎖定時,此操作可不被阻斷,馬上返回程序。通常與lock_sh或lock_ex做or(|)組合。

返回0表示成功,若有錯誤則返回-1,錯誤**存於errno。

#include int dup(int oldfd);
dup()用來複製引數oldfd所指的檔案描述符,並將它返回。此新的檔案描述符和引數oldfd指的是同乙個檔案,共享所有的鎖定、讀寫位置和各項許可權或旗標。例如,當利用lseek()對某個檔案描述詞作用時,另乙個檔案描述詞的讀寫位置也會隨著改變。不過,檔案描述符之間並不共享close-on-exec旗標。

當複製成功時,則返回最小及尚未使用的檔案描述詞。若有錯誤則返回-1,errno會存放錯誤**。

ebadf 引數fd非有效的檔案描述詞,或該檔案已關閉。

dup()相當於呼叫fcntl(oldfd,f_dupfd,0);

#include int dup2(int odlfd, int newfd);
dup2()用來複製引數oldfd所指的檔案描述符,並將它拷貝至引數newfd後一塊返回。若引數newfd為一已開啟的檔案描述詞,則newfd所指的檔案會先被關閉。

當複製成功時,則返回最小及尚未使用的檔案描述詞。若有錯誤則返回-1,errno會存放錯誤**。

dup2()相當於呼叫fcntl(oldfd,f_dupfd,newfd);

#include #include int fcntl(int fd, int cmd, ...);

根據cmd的不同,可能會有如下形式:

int fcntl(int fd, int cmd, long arg);

int fcntl(int fd, int cmd, struct flock *lock);

struct flcok

;

l_type有三種狀態:

f_rdlck 建立乙個供讀取用的鎖定

f_wrlck 建立乙個供寫入用的鎖定

f_unlck 刪除之前建立的鎖定

l_whence也有三種方式:

seek_set 以檔案開頭為鎖定的起始位置

seek_cur 以目前檔案讀寫位置為鎖定的起始位置

seek_end 以檔案結尾為鎖定的起始位置

成功則返回0,若有錯誤則返回-1,錯誤原因存於errno。

C 中的標準庫與非標準庫的區別

c 中我們要用到標準輸出,就需要呼叫cout,那麼,cout這條語句怎麼使用呢?例如 include 標頭檔案 int main std cout hello world include int main cout hello world 從這兩個函式來看都沒多大的區別,最後都是輸出 hello w...

C 標準標頭檔案和非標準標頭檔案

標準標頭檔案 使用 包含的標頭檔案 先到 usr include裡去尋找該標頭檔案,找不到的話到當前目錄 非標準標頭檔案 使用 包含的標頭檔案 直接到當前目錄找該標頭檔案 在原始檔中包含的標頭檔案如果在 usr include和當前目錄找不到話,編譯就會出錯,找不到該標頭檔案。所有的標準標頭檔案都放...

3 檔案操作

可以用來建立檔案。php 4,php 5,php 7,php 8 touch 設定檔案的訪問和修改時間 touch string filename,int time time int atime bool 嘗試將由filename給出的檔案的訪問和修改時間設定為給出的time。注意訪問時間總是會被修...