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...