系統呼叫方式訪問檔案

2021-07-05 13:34:06 字數 3216 閱讀 3849

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 系統呼叫中出現了錯誤,對應的錯誤碼儲存在全域性變數 ...