Linux檔案操作學習:系統調用和標準I/O庫

來源:互聯網
上載者:User

一、什麼是檔案

在講述檔案操作之前,我們首先要知道什麼是檔案。看到這個問題你可能會感覺到可笑,因為對於用過電腦的人來說,檔案是最簡單不過的概念了,例如一個文本是一個檔案,一個work文檔是一個檔案等。但是在Linux中,檔案的概念還遠不止於這些,在Linux中,一切(或幾乎一切)都是檔案。檔案包括很多的內容,例如:大家知道的普通檔案是檔案,目錄也是一個檔案,裝置也是一個檔案,管道也是一個檔案等等。對於目錄、裝置這些的操作也可以完全等同於對純文字檔案的操作,這也是Linux非常成功的特性之一吧。

二、系統調用

1、檔案描述符

檔案描述符是一些小數值,你可以通過它們訪問的開啟的檔案裝置,而有多少檔案描述符可用取決於系統的配置情況。但是當一個程式開始運行時,它一般會有3個已經開啟的檔案描述符,就是

0:標準輸入

1:標準輸出

2:標準錯誤

那些數學(即0、1、2)就是檔案描述符,因為在Linux上一切都是檔案,所以標準輸入(stdin),標準輸出(stdout)和標準錯誤(stderr)也可看作檔案來對待。

2、系統調用常用函數

A、open系統調用

open函數的原型為:

int open(const char *path, int oflags);

int open(const char *path, int oflags, mode_t mode);

path,是包括路徑的完整檔案名稱,oflags是檔案訪問模式(即是什麼方式開啟檔案,唯讀、唯寫還是可讀並可寫等),mode用於設定檔案的存取權限。具體的選擇性參數,可以自己查看手冊頁,這裡不一一詳述。

open建立了一條到檔案或裝置的訪問路徑,如果調用成功,返回一個可以被read、write等其他系統調用的函數使用的檔案描述符,而且這個檔案描述是唯一的,不與任何其他運行中的進程共用,在失敗時返回-1,並設定全域變數errno來指明失明的原因。

B、write系統調用

write函數的原型為:

size_t write(int fildes, const void *buf, size_t nbytes);

write的作用是把緩衝區buf的前nbytes個位元組寫入到檔案描述符fildes關聯的檔案中,返回實際寫入的位元組數。返回0表示沒有寫入任何資料,返回-1表示調用中出現了錯誤,錯誤碼儲存在errno中。

註:fildes一定要是在open調用中返回的建立的檔案描述符,或者是0、1、2等標準輸入、輸出或標準錯誤。

C、read系統調用

read函數的原型為:

size_t read(int fildes, void *buf, size_t nbytes);

read系統調用的作用是從與檔案描述符相關的檔案裡讀入nbytes個位元組的資料,並把它們放到資料區buf中,返回讀入的位元組數,失敗時返回-1。

D、close系統調用

close調用的函數原型為:

int close(int fildes);

close函數的作用是終於檔案描述符fildes一其對應的檔案之間的關聯。

E、例子

說了這麼多,我就給出一個完整的例子吧,就是從一個資料檔案(裡面有1M個‘0’字元)逐個複製到別一個檔案。檔案名稱為copy_system.c,代碼如下:

#include <unistd.h>  #include <sys/stat.h>  #include <fcntl.h>  #include <stdlib.h>        int main()  {      char c = '\0';      int in = -1, out = -1;                //以唯讀方式開啟資料檔案      in = open("Data.txt", O_RDONLY);      //以唯寫方式建立檔案,如果檔案不存在就建立一個新的檔案      //檔案屬主具有讀和寫的許可權      out = open("copy_system.out.txt", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);      while(read(in, &c, 1) == 1)//讀一個位元組的資料          write(out, &c, 1);//寫一個位元組的資料            //關閉檔案描述符      close(in);      close(out);      return 0;  }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.