linux
系統中訪問檔案的方法:
1.linux
系統呼叫
2.基於
c語言的訪問
系統呼叫-建立
int creat(const char *filename, mode_t mode)
-filename:要建立的檔名(包含路徑,預設為當前路徑)
-mode:建立模式
常見建立模式: s_irusr 可讀
s_iwusr 可寫
s_ixusr 可執行
s_irwxu 可讀可寫可執行
除了可以使用上述巨集以外,還可以直接使用數字來表示檔案的訪問許可權:
可執行->1
可寫->2
可讀->4
上述值的和,如可讀可寫->6
無任何許可權->0
檔案描述
在linux系統中,所有開啟的檔案都對應乙個檔案描述符。檔案描述符的本質是乙個非負整數。當開啟乙個檔案時,該整數由系統來分配。檔案描述符的範圍是0-open_max。早起的unix版本open_manx=19,即允許每個程序同時開啟20個檔案,現在很多系統則將其增加至1024
系統呼叫-開啟
int open(const char *pathname, int flags)
int open(const char * pthname, int flags, mode_t mode)
-pathname:要開啟的檔名(包含路徑,預設為當前路徑)
-flags:開啟標誌(具體查baidu),如o_creat,如果使用了o_creat標誌,這時需要使用int open(const char * pthname, int flags, mode_t mode)函式,其意義是如果路徑下沒有該檔案,則自己建立檔案,(否則直接開啟它)。這時需要指定mode來表示檔案的訪問許可權
系統呼叫-關閉
當我們操作完檔案以後,需要關閉檔案:int close(int fd )
這個fd是從使用open系統呼叫時返回的值
系統呼叫-讀
int read (int fd, const void *buf , size_t length)
功能:從檔案描述符fd所指定的檔案中讀取length個位元組到buf所指向的緩衝區中,返回值為實際讀取的位元組數
系統呼叫-寫
int write(int fd, const void *buf,size_t length)
功能:把length個位元組從buf所指向的緩衝區中寫到檔案描述符fd所指向的檔案中,返回值為實際寫入的位元組數
系統呼叫-定位
int lseek(int fd, offset_t offset, int whence)
功能:把檔案讀寫指標相對whence移動offset個位元組。操作成功時,返回檔案指標相對於檔案頭的位置
whence可使用下述值:
seek_set——
相對檔案開頭
seek_cur——
相對檔案讀寫指標的當前位置
seek_end——
相對檔案末尾
offset可取負值,表示向前移動。
可用lseek(fd,0,seek_end)呼叫檢視檔案長度
系統呼叫-訪問判斷
判斷檔案是否可以進行某種操作(讀,寫等):
int access(const char *pathname, int mode)
-pathname:檔名稱
-mode:要判斷的訪問許可權。可以取下值或者是他們的組合。r_ok:檔案可讀,w_ok:檔案可寫,x_ok:檔案可執行,f_ok檔案存在
返回值:當我們測試成功時,函式返回0,否則如果乙個條件不符合時,返回-1
例項分析:
file_creat.c
#include
#include
#include
#include
#include
void
create_file(char *filename)else }
int main(int argc,char *argv)
for(i=1;i
create_file(argv[i]); }
exit(exit_success); }
例項分析:
file_open.c
#include
#include
#include
#include
#include
int main(int argc ,char *argv)
//如果
flag
引數裡有
o_creat表示,
該檔案如果不存在
,系統則會建立該檔案,、
//該檔案的許可權由第三個引數決定
,此處為
0755
//如果flah
引數裡沒有
o_creat引數,
則第三個引數不起作用.此時
,如果要打
//開的檔案不存在
,則會報錯.
//所以
fd=open(argv[1],o_rdwr),
僅僅只是開啟指定檔案
if((fd=open(argv[1],o_creat|o_rdwr,0755))<0)else
close(fd);
exit(0);}
綜合例項:
file_cp.c
int main(int argc,char **argv)
if((from_fd=open(argv[1],o_rdonly))==-1)
if((to_fd=open(argv[2],o_wronly|o_creat,s_irusr|s_iwusr))==-1)
while(bytes_read=read(from_fd,buffer,buffer_size))
} if(bytes_write==-1)break; }
}close(from_fd);
close(to_fd);
exit(0); }
系統呼叫的方式訪問檔案
1 建立檔案 int create const char filename mode t mode 建立檔案。filename為檔案路徑,mode為檔案許可權,如 s irusr 可讀 s irwxu 可讀 可寫 可執行。也可以用數字表示,如 0755。2 檔案描述 在linux中,所有開啟的檔案都...
linux系統呼叫方式訪問檔案
系統呼叫 建立 一 int creat const char filename,mode t mode filename 要建立的檔名 包含路徑,預設為當前路徑 mode 建立模式 常見建立模式 s irusr 可讀 4 s iwusr 可寫 2 s ixusr 可執行 1 s irwxu 可讀 寫...
系統呼叫之檔案訪問
1 write 系統呼叫 系統呼叫write 的作用是,把緩衝區 buf的前 nbytes 位元組寫入到與檔案描述符 fildes 關聯的檔案中,同時它會返回實際寫入的位元組數。如果返回 0,就表示為寫出任何資料 如果是 1,就表示在 write 系統呼叫中出現了錯誤,對應的錯誤碼儲存在全域性變數 ...