對於io操作而言,有四個基本的操作:open 、read 、write 、close 我們來逐個解釋。
在此之前我們先解釋一下什麼是檔案描述符
檔案描述符
作業系統通過乙個整數開代表開啟的檔案,我們將這個整數稱為檔案描述符。
檔案描述符的範圍[ 0 ~ 1024 ] 不同的系統可能上限不同 具體檢視方法`
ulimit -n
0:標準輸入 stdin
1:標準輸出 stdout
2:標準錯誤 stderr
系統選擇檔案描述符的方法,從小到大找第乙個未被使用 的檔案描述符,
一般從3開始 因為0 、1 、 2 已經被系統占用。
open
int open(const
char *path , int flag);
功能 : 開啟檔案
引數 :
path :要開啟的額檔案
flags :開啟方式
o_rdonly:唯讀方式開啟
o_wronly:只寫方式開啟
o_rdwr :讀寫方式開啟
返回值 :
失敗 : -1
成功 : 檔案描述符
int open (const
char *path , int flags , mode_t mode )
功能:建立檔案
引數:*path:要建立的檔名
flags :o_creat | o_excl 若不存在,則建立
mode :給檔案的許可權
read
int read(int fd , char *buf, size_t len);
功能 :
從 fd 檔案中讀取資料到buf所指向的空間,該空間大小為 len
引數 :
fd :open 函式返回的檔案描述符
*buf : 要讀入資料的空間
len :讀取的長度
返回值 :
失敗 : -1
成功 :實際讀取的長度
write
int write (int fd , const
char *buf , size_t len );
往 fd 所指向的檔案寫入資料, 資料的起始位址為buf ,大小為 len
close
int close (int fd ) ;
關閉檔案
lseek
int lseek(int fd , off_t offset , int whence)
定位到指定位置
引數:offset : 偏移量
whence :
seek_set檔案開始
seek_cur檔案當前指向
seek_end檔案結尾
返回值:
相對於檔案開頭的偏移多少位元組
結合以上函式 寫乙個簡單的拷貝函式
1 #include 2 #include 3 #include 4 #include5 #include 67
//usage : copy src dst
8int main(int argc , char*ar**)
13//
開啟原始檔
14int fd_src = open (ar**[1
], o_rdonly);
15if(fd_src == -1 ) perror("
open
"),exit(0
);16
17//
開啟目標檔案 ,若不存在則建立
18int fd_dst = open (ar**[2], o_creat|o_rdwr|o_excl, 0644
);19
if(fd_dst == -1 && errno ==eexist )else29}
3031
//迴圈讀取原始檔,寫入目標檔案
32char buf[1024+1
];33
while(1)41
42//關閉檔案
4344
close(fd_src);
45close(fd_dst);
46 }
posted @
2018-10-13 14:30
yeling0119 閱讀(
...)
編輯收藏
IO效能相關
網絡卡效能優化方案 繫結中斷 至特定cpu 減少介面屬性設定 資料報打入cpu標籤,提公升快取命中 磁碟隨機讀寫優化方案 批量讀寫 尋道更快 轉速更高的硬碟 記憶體作為快取 ssdraid 磁碟順序讀寫優化方案 raid ssdiops 每秒執行的io次數 bw 頻寬,每秒的吞吐量 lat 每次io...
IO操作 檔案IO
一 系統呼叫 系統呼叫實際上是作業系統 核心 提供的供使用者使用的介面函式。二 標準io函式和檔案io函式的關係 標準io是c庫內定義的函式,是凌駕於系統之上的,適用於任何的作業系統 檔案io是由linux系統提供的,只能在linux系統中使用,而不可以在其它作業系統中使用。標準io函式可以呼叫檔案...
檔案I O相關函式
1.open 系統呼叫 開啟乙個檔案返回檔案描述符 int open const char name,int flags int open const char name,int flags,mode t mode 2.creat 函式 int creat const char name,mode ...