Linux 檔案程式設計

2021-08-13 02:49:48 字數 2969 閱讀 5740

一、 linux系統呼叫及使用者程式設計介面(api)

1、所謂系統呼叫是指作業系統提供給使用者的一組「特殊」介面,使用者程式可以通過這組「特殊」介面來獲得作業系統核心提供的的服務。

系統呼叫僅僅是乙個通過軟中斷機制向核心提交請求,以獲取核心服務的介面。在實際使用中程式設計師呼叫的通常是使用者程式設計介面—api,系統命令相對api更高了一層,它實際上是乙個可執行程式,它的內部引用了使用者程式設計介面(api)來實現相應的功能。

2、linux一點哲學,「一切皆為檔案」;在linux中對目錄和裝置的操作都等同於對檔案的操作,都是使用檔案描述符來進行的。

linux檔案可分為:普通檔案,目錄檔案,鏈結檔案,裝置檔案

3、乙個程序啟動時,都會開啟3個檔案:標準輸入、標準輸出和標準出錯處理 

標準輸入         0            stdin_fileno

標準輸出         1            stdout_fileno

標準出錯         2            stderr_fileno

常建立模式:

s_irusr      可讀

s_iwusr     可寫

s_ixusr      可執行

s_ixrwu     可讀、可寫、可執行

除用以上巨集來選擇建立模式,也可以用數字來表示

二、系統呼叫函式    

1 建立檔案   creat  

#include

#include

#include

#include

#include

int main()

return 0;

} 2  開啟檔案   open

#include

int main()

;*/char buf[100] = ;

fd = open("creat.txt",o_rdwr | o_creat ,0666);        

if (-1 == fd)

/*ret = write(fd,buf,strlen(buf));

if (-1 == ret)

*//memset(buf,0,strlen(buf));

ret = read(fd,buf,sizeof(buf));

if (-1 == ret)

printf("read txt is:%s\n",buf);

close(fd);

return 0;

}3、利用read函式,write函式實現cp命令   

#include

#include

#include

#include

#include

#include

#include

int main(int argc,char *argv)

;int ret;

char buf[100] = ;

fd[0] = open(argv[1],o_rdonly);

if(fd[0] < 0)

fd[1] = open(argv[2],o_rdwr | o_creat | o_excl,777);    

if (fd[1] < 0)

while((ret = read(fd[0],buf,sizeof(buf))) != 0)

memset(buf,0,sizeof(buf));          

}return 0;

}4、int lseek(int fd, offset_t offset,  int whence)

功能:將檔案讀寫指標相對whence移動offset個位元組。操作成功時,返回檔案指標相對於檔案頭的位置

seek_set    相對檔案開頭      seek_cur      當前位置          seek_end    相對檔案末尾

三、標準庫函式

1、標準i/o提供快取的目的就是減少呼叫read和write的次數,它對每個i/o流自動進行快取管理(標準i/o函式通常呼叫malloc來分配快取)。

它提供了三種型別的快取:    1) 全快取。當填滿標準i/o快取後才執行i/o操作。磁碟上的檔案通常是全快取的。    2) 行快取。當輸入輸出遇到新行符或快取滿時,才由標準         i/o庫執行實際i/o操作。stdin、stdout通常是行快取的。    3) 無快取。相當於read、write了。stderr通常是無快取的,因為它必須盡快輸出。

2、庫函式建立與開啟

r 唯讀方式開啟,檔案必須已存在    w 只寫方式開啟,如果檔案不存在則建立,檔案存在清空重寫    a只能在末尾追加資料,檔案不存在則建立

四、標準庫函式

fread 與 fwrite  

#include

#include

#include

int main()

;scanf("%s",buf);

fp = fopen("hello.txt","w");

if (fp == null)

/*ret = fread(buf,1,sizeof(buf),fp);

if (ret == 0)

printf("%s",buf);*/

ret = fwrite(buf,1,strlen(buf),fp);

if (ret == 0)

return 0;

}利用fread函式實現cat命令

#include

#include

#include

int main(int argc,char *argv)       (利用命令列引數輸入)

;fp = fopen(argv[1],"r");

if (fp == null)

while((ret = fread(buf,1,sizeof(buf)-1,fp)) != 0)      (最好減1)

return 0;

}

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中,為了更好地保護核心空間,將程式的執行空間分為核心空間和使用者空間 也就是常稱的核心態和使用者態 它們分別執行在不同的級別上,在邏輯上是相互隔離的。因此,使用者...