Linux下系統呼叫訪問檔案

2021-06-16 06:07:52 字數 3513 閱讀 5067

linux

的檔案操作有兩種方式:

①linux系統呼叫方式,這種方式依賴於linux系統

②c語言的檔案操作,採用c語言的庫函式實現。

以下是linux系統呼叫方式:

1. 建立檔案

intcreat(const char *filename, mode_t mode)

filename

:要建立的檔名,包含路徑,預設時為當前路徑;

mode

:建立模式

常見建立模式:

s_irusr         

可讀4(

直接用數字來表示檔案的訪問許可權)

s_iwusr         可寫2

s_ixusr         

可執行1

s_irwxu         

可讀、寫、執行7

例項如下:

#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);

}注意:**中的系統標頭檔案都在/usr/include目錄下,這個目錄是gcc定義的系統目錄

訪問許可權

每乙個檔案或是目錄的訪問許可權都有三組,每組用三位表示,分別為檔案所有者的讀、寫和執行許可權;與所有者同組的使用者的讀、寫和執行許可權;系統中其他使用者的讀、寫和執行許可權。當用ls-l 命令顯示檔案或目錄的詳細資訊時,最左邊的一列為檔案的訪問許可權。

例如:$ ls –l sobcrc.tgz

-rw-

r--r--

1 root root 483997 jul 15 17:31 sobcrc.tgz

注意這裡共有10

個位置。第乙個字元指定了檔案型別,如果第乙個字元是橫線,表示是乙個非目錄的普通檔案,如果是d,表示是乙個目錄。

r代表唯讀,w代表寫,x代表可執行,橫線代表無該項許可權。

2. 開啟檔案和關閉檔案

檔案描述

在linux系統中,所有開啟的檔案都對應乙個檔案描述符。檔案描述符的本質是乙個非負整數。當開啟乙個檔案時,該整數由系統來分配。檔案描述符的範圍是0~open_max。

intopen(const char *pathname, int flags)

intopen(const char*pathname, int flags, mode_t mode)

pathname

:為要開啟檔案的路徑名,預設值為當前路徑

flags

:當前標誌

注意:只有使用o_creat標誌時,才使用int open(const char*pathname, int flags, mode_t mode)

這時,mode指定建立檔案的許可權。

intclose(int fd)

用於關閉開啟的檔案,其中fd是已經開啟的檔案描述符。

例子如下:

#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); }

3.系統呼叫實現檔案的拷貝(綜合使用)

intread(int fd,  const void *buf, size_t length)

功能:從檔案描述符

fd所指定的檔案

中讀取length個位元組

到buf

所指向的緩衝區

中,返回值為實際所讀取的位元組數。

intwrite(int fd, const void *buf, size_t length)

功能:把

length

個位元組從

buf指向的緩衝區

寫到檔案描述符fd所指向的檔案

中,返回值為實際寫入的位元組數。

intlseek(int fd, offset_t offset, int whence)

功能:將檔案讀寫的指標相對於

whence

移動offset

個位元組(可為負值,表示向前移動)

。操作成功後,返回檔案指標相對於標頭檔案的位置。

whence

可使用下述值:

seek_set

:相對檔案開頭

seek_cur

:相對檔案讀寫指標的當前位置

seek_end

:相對檔案末尾  

intaccess(const char *pathname, int mode)

pathname

:檔名稱

mode

:要判斷的訪問許可權。可以取以下值或者是它們的組合。

r_ok

:檔案可讀,w_ok:檔案可寫;

x_ok

:檔案可執行,f_ok:檔案可存在。

返回值:測試成功,返回值為0,否則為-1

示例如下:

#include

#include

#include

#include

#include

#define buffer_size 1024

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); }

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

系統呼叫方式訪問檔案

linux 系統中訪問檔案的方法 1.linux 系統呼叫 2.基於 c語言的訪問 系統呼叫 建立 int creat const char filename,mode t mode filename 要建立的檔名 包含路徑,預設為當前路徑 mode 建立模式 常見建立模式 s irusr 可讀 s...