LINUX 檔案程式設計

2021-10-18 18:07:25 字數 3871 閱讀 6952

總述:我們在linux上開啟檔案時,在乙個程序裡開啟多個檔案時,需要依靠檔案描述符號進行區分,它返回的時乙個int 型別的資料。

下面展示一些 檔案開啟的引數說明。

// 引數說明

int open(const char*pathname,int flags);

int open(const char*pathname,int flags,mode_t mode);

其中的pathname為檔案名字,flags 為許可權:

o_rdonly 唯讀開啟

o_wronly 只寫開啟

o_rdwr 可讀可寫

mode 是在建立檔案的時候flags中使用了o_creat,mode記錄帶建立檔案的許可權

// 我們可以在linux下還可以看到我們檔案的各個情況

運用的命令: ls -l

以我的linux為例子

-rwxr-xr-x 1 ls book 8426 feb 2 13:46 a.out

-rw-r--r-- 1 ls book 3508 feb 2 00:58 curses.c

-rw-r--r-- 1 ls book 114 dec 25 13:01 dongjj.c

-rw------- 1 ls book 0 feb 2 13:46 file

-rw-r--r-- 1 ls book 270 feb 2 13:46 file.c

-rwxr-xr-x 1 ls book 8381 dec 24 19:20 firstprogram

-rw-r--r-- 1 ls book 3704 jan 28 11:51 link1.c

-rw-r--r-- 1 ls book 21 nov 1 2018 readme

-rwxr-xr-x 1 ls book 13514 feb 2 00:58 sanake

-rwxr-xr-x 1 ls book 8516 jan 29 23:34 sanke

-rwxr-xr-x 1 ls book 8373 dec 24 19:23 secondprogram

-rwxr-xr-x 1 ls book 8436 dec 25 13:04 thirthprogram

我們可以在上面看到各種操作時間和許可權,rwxr指的是其中

r指的是讀的許可權(4);w指的是寫的許可權(2);x指的是可執行許可權(1)

其中還有一點可以說的是我再寫file.c的時候在mode引數上寫的是0600,6指的是4+2即刻可讀可寫,linux和我們在vs上寫的程式不太一樣就是我們的檔案和可執行檔案是兩個東西。

下面展示**。

程式執行的結果

檢視檔案讀取的函式宣告,第乙個引數還是fd檔案標誌,第二個引數是我們定義的快取記憶體,第三個檔案位元組數的大小。

函式讀取成功是返回乙個讀取的位元組數,並且內容儲存在快取記憶體中,不成功返回-1。但是我們正常讀取的時候檔案標誌位是在檔案的末尾所以我們需要運用函式改變標誌位。

1.whence是決定游標位置,第乙個seek_set是指的是文頭,seek_cur是指的檔案當前游標,seek_end指的是檔案尾。

2.offset 指的是相對於whence的偏移量。(負數表示向前偏移,正數向後偏移)

3.fd就不說了。

通過上面的程式執行看到並沒有讀取出來,是因為游標一直在檔案末尾,讀取的是空的內容和位元組數。我們相對於上面只需加上:

// a code block

lseek(fd,0,seek_set);//相對於檔案頭偏移量是0,即把游標放在檔案頭

//記錄這個函式的返回值是乙個偏移量,我們也可以用來計算文字的位元組數

讀取成功

直接上**。

// a code block

#include#include#includeint main(int argc,char**ar**)

//判斷

int n = lseek(fd1,0,seek_end);//獲取位元組大小

char *buff = (char *)malloc(sizeof(char)*n+1);//malloc空間

lseek(fd1,0,seek_set);//移動游標到開頭

read(fd1,buff,n);//讀檔案

fd2 = open(ar**[2],o_rdwr|o_creat,0600);//開啟檔案

int n_write = write(fd2,buff,n);//寫入檔案

close(fd1);//關閉檔案

close(fd2);//關閉檔案

return 0;

}//**文件是後面編輯加上的 linux裡全英文

實現思路:

1.是關於main函式的傳參問題

linux main函式引數講解

2.是設計思路:

a.先對我們所編輯的檔案進行讀取

b.傳入乙個臨時的指標

c.開啟另外乙個檔案

d.從快取區裡面寫入檔案

e.關閉檔案

// a code block

ls@embed_learn:~$

ls@embed_learn:~$ ./mycp file.c file1.c

ls@embed_learn:~$

ls@embed_learn:~$

ls@embed_learn:~$

ls@embed_learn:~$ ls

a.out dongjj.c file1.c firstprogram mycp sanake secondprogram thirthprogram

curses.c file file.c link1.c readme sanke

ls@embed_learn:~$

ls@embed_learn:~$

執行成功

以上是本人學習記錄,水平有限,如有錯誤,歡迎指正!!!over。

Linux檔案程式設計

在linux下可以通過相應的檔案i o函式來完成對檔案的操作,這些函式通常被稱為不帶緩衝的i o,因為這些函式對檔案的讀寫都是呼叫linux核心的系統呼叫來實現的。基本的函式包括 open read write lseek 設定檔案指標 close等 呼叫格式 include include inc...

Linux檔案程式設計

linux中檔案程式設計可以使用兩種方法 1.linux系統呼叫 2.c語言庫函式。系統呼叫是基於linux系統的,它不能跨系統使用。c語言庫函式在各個系統都能使用。a.下面先介紹基於系統呼叫的檔案程式設計 1.檔案的建立.int creat const char filename,mode t m...

Linux檔案程式設計

所謂系統呼叫是指作業系統提供給使用者的一組 特殊 介面,使用者程式可以通過這組 特殊 介面來獲得作業系統核心提供的的服務 由於在linux中,為了更好地保護核心空間,將程式的執行空間分為核心空間和使用者空間 也就是常稱的核心態和使用者態 它們分別執行在不同的級別上,在邏輯上是相互隔離的。因此,使用者...