1.
基本操作
#include
#include
#include
open
fd=open(「/tmp/hello.c」,o_wronly |o_creat,0600);
close
close(fd);
read
read(fd,buf,len)
write
write
(fd,buf,len
)lseek
off_t lseek(int fd,off_t ,int whence)
whence
seek_setseek_cur seek_end
lseek(fd,0,seek_set)
檔案指標移到檔案起始位置 2.
檔案鎖
fcntl
fcntl(int fd, int cmd, struct flock *lock)
cmdf_setlk f_getlk
lock
具體結構略,
說明鎖的型別,有
f_rdlck
讀取鎖(共享鎖,可共享)
f_wrlck
寫入鎖(互斥鎖)
f_unlck解鎖
fcntl(fd,f_rdlck,&lock);
fcntl(fd,f_wrlck,&lock);
fcntl(fd,f_unlck,&lock);
3.select
fcntl
解決了檔案共享的問題,接著就是
i/o復用的問題。 io
處理模型
包括,阻塞型
io模型,非阻塞模型,
io多路轉接模型,訊號驅動
io模型,非同步模型 對於
select
而言,屬於
io多路轉接模型
在這種模型下,如果請求的
io操作阻塞,且它不是真正的阻塞
io,而是讓其中的乙個函式等待,在這期間,
io還能進行其他操作,
select
函式和poll
函式就屬於此種模型。
#include
#include
#include
int select(int numfds,fd_set *readfds,fd_set *writefds,fd_set *exeptfds,struct timeval *timeout)
numfds
為需要檢測的號碼最高的檔案描述符
+1讀檔案描述集
寫檔案描述集
出錯檔案描述集
timeout
,如果為
0則從不等待
測試所有的描述集之後就返回
如果為null
,表示永遠等待,直到捕捉到訊號或者檔案描述集已經準備好。
對檔案描述集的操作包括,
fd_zero(fd_set *set)
fd_set(int fd,fd_set *set)
fd_clr(int fd,fd_set *set)
fd_isset(int fd,fd_set *set)
測試該集中的乙個給定位是否有變化 對於
select
和poll
的一些東東會在
udev
,socket
,電源管理中進一步說明
標準帶緩衝的
io操作包括三種緩衝儲存,全緩衝,行緩衝,不緩衝。1.
fopen fclose
file *stream;
stream=fopen(「test」,」r」); 「r」 「w」 「a」
fclose(stream);
size_t fread(void *ptr,size_t size,size_t nmemb,file *stream)
size_t fwrite(const void *ptr,size_t size,size_t nmemb,file *stream)
size
一條記錄的大小
nmemb
記錄的數目
write
返回成功寫入的記錄數目
例子,#include
int main() ;
stream=fopen(「test」,」w」);
i=fwrite(s,sizeof(char),sizeof(s),stream);
fclose(stream); }
2. fputc(fgetc(stdin),stdout);
char s[80];
fputs(fgets(s,80,stdin),stdout);
linux程式設計之檔案I O
linux下c語言對於檔案的操作,我們會經常用到fopen fclose fwrite fread fgets 等一系列庫函式,基本和是和windows下學習c語言一樣的,其實這些庫函式就是在linuxx下對系統呼叫函式的封裝,因此這裡只介紹系統函式下的檔案操作函式。一 open 開啟檔案 incl...
Linux程式設計基礎 檔案I O
unix linux為作業系統把服務和裝置都抽象成了檔案,並提供了一套簡單而統一的介面,這部分介面就是檔案讀寫。也就是說unix linux系統中的任何物件都可以被當作某種特殊的檔案,以檔案的形式訪問。檔案分類 目錄檔案 裝置檔案 socket檔案 管道檔案 普通檔案 鏈結檔案檔案相關的系統呼叫 i...
Linux學習 檔案I O程式設計
在linux中,為了保護核心空間,將程式的執行空間分為核心空間和使用者空間,核心態和使用者態 他們執行在不同的級別上,在邏輯上是相互隔離的,因此使用者程序在通常情況下不允許訪問核心資料,也無法使用核心函式,他們只能在使用者空間操作使用者資料,呼叫使用者空間的函式,作業系統為使用者提供了兩個介面 1....