1.open函式
#include
int open(const char *pathname, int oflag, .../*mode_t mode */);
oflag引數:
o_rdonly 唯讀開啟
o_wronly 只寫開啟
o_rdwr 讀寫開啟
這三個必須指定乙個
下面是可選的:
o_creat 若此檔案不存在,則建立它
o_excl 如果同時指定了o_creat, 而檔案已經存在,則會出錯
o_trunc 如果此檔案存在,而且為只寫或讀寫成功開啟,則將其長度截短為0
o_noctty
o_nonblock
o_dsync 使每次write等待物理i/o操作完成,但是如果寫操作並不影響讀取剛寫入的資料,則不等待檔案屬性被更新
o_rsync 使每次乙個以檔案描述符作為引數的read操作等待,直至任何對檔案同一 部分進行的未決寫操作都完成
o_sync 使每次write等待物理i/o操作完成,包括由write操作引起的檔案屬性更新所需的io
2.create函式
#include
int creat(const char *pathname, mode_t mode);
等價於 open(pathname, o_wronly|o_creat|o_trunc, mode);
3.close函式
關閉乙個開啟的檔案
#include
int close(int filedes);
4.lseek函式
#include
off_t lseek(int filedes, off_t offset, int whence);
whence取值說明:
seek_set 則將該檔案的偏移量設定為距檔案開始處offset個位元組
seek_cur 則將該檔案的偏移量設定為其當前值加offset,offset可正負
seek_end 則將該檔案的偏移量設定為檔案長度加offset,offset可正負
測試能否對標準輸入設定偏移量
#include "apue.h"
intmain(void)
建立乙個具有空洞的檔案
#include "apue.h"
#include
char buf1 = "abcdefghij";
char buf2 = "abcdefghij";
intmain(void)
5.read函式
#include
ssize_t read(int filedes, void *buf, size_t nbytes);
6.write函式
#include
ssize_t write(int filedes, const void *buf, size_t
nbytes);
將標準輸入複製到標準輸出
#include "apue.h"
#define buffsize 4096
intmain(void)
7.pread和pwrite函式
#include
ssize_t pread(int filedes, void *buf, size_t
nbytes, off_t offset);
ssize_t pwrite(int filedes, const void *buf,
size_t nbytes, off_t offset);
相當於順序呼叫lseek和read或write,但pread和pwrite是原子操作
8.dup和dup2函式
複製乙個現存的檔案描述符
9.sync,fsync和fdatasync函式
#include
int fsync(int filedes);
int fdatasync(int filedes);
void sync(void);
sync函式只是將所有修改過的塊緩衝區排入寫佇列,然後就返回,並不等待實際寫磁碟操作結束
fsync函式只對由檔案描述符filedes指定單一檔案起作用,並且等待寫磁碟操作結束
fdatasync類似於fsync,但他只影響檔案的資料部分。fsync還會同步更新檔案的屬性。
10.fcntl函式
#include
int fcntl(int filedes, int cmd, ... /* int arg */ );
cmd說明:
f_dupfd 複製乙個現有的描述符
f_getfd 複製檔案描述符
f_setfd 設定檔案描述符
f_getfl 對應於filedes的檔案狀態標誌作為函式值返回
f_setfl 將檔案狀態標誌設定為第三個引數值
f_getown 取當前接受sigio和sigurg訊號的程序id或程序組id
f_setown 設定接受sigio和sigurg訊號的程序id或程序組id
對於指定的描述符列印檔案標誌
對乙個檔案描述符開啟乙個或多個檔案狀態標誌
#include "apue.h"
#include
void
set_fl(int fd, int flags) /* flags are file status flags to turn on */
11.ioctl函式
#include /* system v */
#include /* bsd and linux */
#include /* xsi streams */
int ioctl(int filedes, int request, ...);
ioctl函式是io操作的雜物箱。
Unix環境高階程式設計 一 檔案I O
unix系統中大多數檔案i o只需用到五個函式 open read write lseek close。本章說介紹的i o是不帶緩衝的,即 每個read和write都呼叫核心中的乙個系統呼叫。不是iso c的組成部分。對於核心而言,所有開啟的檔案都通過檔案描述符引用。在中定義三個標準的檔案描述符 s...
Unix環境高階程式設計學習筆記(二) 檔案IO
談linux下的檔案操作,我們首先需要了解程序表,這是被每個程序所維護的一張開啟檔案的對映表,參照下圖。索引值是檔案描述符,與之相關聯的節點包含fd flag以及乙個指向file table的指標。其中fd flag主要包含close on exec標記,該標記的作用在於當開闢其他程序呼叫exec ...
I O 3 檔案操作
1 文字檔案編碼,文字檔案有不同的儲存方式,將字串以什麼樣的形式儲存為二進位制,這個就是編碼,utf 8 ascii unicode等,如果出現亂碼一般就是編碼的問題,文字檔案相關的函式一般都有乙個encoding型別的引數,取得編碼的方式 encoding.default encoding.utf...