各位看官們,大家好,上一回中咱們說的是查看環境變量的例子,這一回咱們說的例子是:基於文件描述符的文件操作。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們,我們在前面介紹進程通信的時候簡單地提到過文件操作。文件操作相對進程通信來說要容易一些,因此,當時也沒有做詳細的介紹,不過還是有看官提到了文件操作的內容。為了大家對文件操作有更加清晰的認識,今天我將和大家一起看看文件操作相關的內容。
在Linux系統中,一切皆文件。因此,文件操作還是還很重要的內容,Linux中的文件類型有:
常規文件(-); 目錄文件(d); 連接文件(l); 設備文件(b或c); 管道文件(p); 套接字(socket);我們可以通過ls -al命令來查看目錄中文件的類型。上面括號中的字母表示該命令運行結果中文件類型的表示方法。我們舉個例子進行說明:
ls -al /lib //我們只截取了一部分命令運行結果,但是足以說明問題
total 684
drwxr-xr-x 24 root root 4096 2月 8 2015 .
drwxr-xr-x 22 root root 4096 3月 19 12:49 ..
drwxr-xr-x 2 root root 4096 11月 27 2014 brltty
lrwxrwxrwx 1 root root 21 2月 1 2015 cpp -> /etc/alternatives/cpp
-rw-r--r-- 1 root root 26376 1月 9 2014 libip4tc.so.0.1.0
lrwxrwxrwx 1 root root 17 2月 1 2015 libip6tc.so.0 -> libip6tc.so.0.1.0
-rw-r--r-- 1 root root 26376 1月 9 2014 libip6tc.so.0.1.0
該結果第一列的第一個字母就是文件類型,比如d表示該文件是目錄文件,l表示該文件是鏈接文件,-表示該文件是常規文件。該目錄中沒有其它文件類型的文件,我們也就不說了,相信大家在遇到的這類文件的時候也能明白它們的文件類型。今天我們介紹的文件操作,可以用於設備文件以外的其它文件。
明白文件類型後, 我們介紹一下文件描述符。文件描述符由系統提供,系統提供的API接口通過它來操作文件。它通常一個非負整數,而且由系統分配和回收,分配時從最小的數值開始依次增大,文件操作完成後需要手動關閉文件,其實就是告訴系統去回收文件操作符,以便下次再使用,因此文件操作符是一個環保產品,可以循環利用。
文件操作符的值是唯一的,即使操作同一個文件也會有不同的文件操作符。文件操作符的值也不是無究大,它有一個最大值,也就是程序能夠同時打開最多的文件數量,這個值與具體的系統有關,POSIX標准只規定了最小值為16,在Linux中它的默認值為256.不過這個值會隨著系統運行的情況動態變化。
系統默認使用了前三個文件描述符:0,12。它們分別表示標准輸入,標准輸出和標准錯誤。這三個文件描述符比較特殊,每個進程啟動時都會自動打開這三個文件操作符,在進程結束時又會自動關閉它們。也就是說它們是由系統進行管理的,我們只管使用就行,其它的事情交給系統去處理。我們舉個例子來說明:
ls -al /dev/fd/ //我們使用ls命令查看當前進程打開的文件描述符
total 0
dr-x------ 2 tom tom 0 4月 30 10:01 .
dr-xr-xr-x 9 tom tom 0 4月 30 10:01 ..
lrwx------ 1 tom tom 64 4月 30 10:01 0 -> /dev/pts/2
lrwx------ 1 tom tom 64 4月 30 10:01 1 -> /dev/pts/2
lrwx------ 1 tom tom 64 4月 30 10:01 2 -> /dev/pts/2
lr-x------ 1 tom tom 64 4月 30 10:01 3 -> /proc/4012/fd //當前進程打開的文件描述符為3
從上面的運行結果中可以看到,當前進程打開的文件描述符為3,而0,1,2這三個文件描述符是系統自動打開的。
各位看官,關於文件操作:基於文件描述符的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。