Linux下文件的七種類型


文件屬性


1. 本章引言
上一章通過學習文件io,知道了如何使用文件io來打開文件,對文件進行讀寫等操作,那么我們這一章將換一個角度,專門圍繞文件屬性進行相關的討論。

1.1 什么是文件屬性?
我們通過ls查到就是文件屬性,只不過ls只顯示了部分文件屬性。

1.2 本章講什么
本章專門介紹操作文件屬性的各種OS API,比如獲取文件的讀寫權限、文件的大小、文件的創建時間等。

1.3 本章的意義
本章操作文件屬性的OS API,使用的不像文件io的OS API那樣頻繁,但是學習本章可以讓你深入的理解有關文件這個東西,所以非常希望大家能夠認真對待本章內容。

1.4 本章涉及到的OS API有哪些?
stat、fstat、lstat

umask

chmod、fchmod

chown,fchown,lchown

link,unlink,remove,rename
symlink和readlink

chdir、和getcwd

看起來很多,不過每一行都是一組,只要理解其中一個,其它的都很好理解。
而且這些函數,都與我們常用的cd、ls、chmod、chown、pwd等命令息息相關,大家之前就已經熟悉了這些命令,
所以開解這些函數時,並不會覺得困難。

同樣的,對於這些函數,不要去記,關鍵是理解,如果用到時,你能夠查閱man手冊后者資料,快速的把它用起來,就說明你學明白了。


2. 回顧文件7種類型

之前將Linux基礎的時候說過,在Linux下一切皆是文件,從應用層(應用程序層)看待底層機制時,皆以文件的方式來看待這些機制。

但是不同的底層機制,畢竟是不同的,比如底層驅動程序,就分為字符設備驅動和塊設備驅動,根據底層機制的不同,文件被分
為了7種類型。


2.1 文件的7種類型

我們在學習《Linux基礎初級》時講過,Linux一切皆文件,文件一共分為7類分別是- d c s p l b。

(1)普通文件(regular file:-)

1)普通文件根據存放的內容的不同,又分為如下兩種

(a)文本文件
存放的都是文字編碼,文本編輯器打開后,會將這些文字編碼翻譯為文字圖形,以供人識別。


(b)純二進制文件(機器碼)
比如經過編譯后得到的可執行文件,里面放的是cpu執行的純二進制機器碼,由於文編編輯器只認識文字編碼,所以
用文本編輯器打開后,顯示的內容無法是錯亂的,無法辨識。


其實不管存放的是文字編碼,還是機器碼,在計算機中存儲時,其實都是以二進制形式存放的,只不過我們這里可刻
意的把機器碼這類非文字編碼的數據,特意強調為了二進制數據。


2)以存儲5為例

(a)以‘5’存儲:在文件中存放的是'5'的ASCII碼為53(??00110101?),在計算機中實際存放的是?00110101?。
(b)以整數5存儲:文件中實際存放是整數5(00000101),在計算機中實際存放的是00000101。

對linux內核而言,這兩種文件並無區別,至於文件中的數據如何解釋,則由處理這些數據的應用程序(比如文本編輯器)
來決定。

不管是文字編碼數據,還是純二進制數據,應用程序調用read、write讀寫文件時,沒有任何區別。


(2)目錄文件(director file:d)
目錄是一種特殊的文件,專門用於管理其它文件。



(3)字符設備文件(character special file:c)

字符設備文件,就是字符設備驅動程序,在上層的表現形式。

當應用程序調用底層字符設備驅動程序,實現對某個字符設備進行讀寫時,上層就需要對接底層的字符驅動程序,字符設備驅動
在上層,會以“字符設備文件”的形式表現出來,我們通過open、read、write去讀寫字符設備文件,就實現了和底層字符設備驅動
程序的交互。



(4)塊設備文件(block special file:b):對應塊設備(如磁盤等)。

1)塊設備文件,是塊設備驅動程序在上層的表現形式。


2)字符設備與塊設備有什么區別?

(a)字符設備
字節為單位來操作數據。

比如:鍵盤、鼠標、顯示器都等是字符設備。
字符設備的驅動程序,就稱為“字符設備驅動程序”。


(b)塊設備
塊設備存儲的數據量往往非常大,為了提高讀寫效率,都是以塊(1024字節)為單位來操作數據。

比如:電腦硬盤、移動硬盤、u盤等,凡是涉及大量數據存儲的,都是以塊為單位來操作數據的,都是塊設備。

塊設備的驅動程序,就稱為“塊設備驅動程序”。


(5)FIFO(fifo:p)
管道文件,用於實現不同進程(程序)之間的通信,管道是OS提供的一種純代碼層面的通信機制。

數據 數據
A進程 ————————> 管道文件 ————————>B進程


后面講進程間通信時,會具體講到管道這個東西。


(6)套接字文件(socket:s)
專門用於網絡通信的文件。

講到網絡編程時,再來具體介紹。


(7)符號連接(symbolic link:l):
我們在Linux基礎中講過了,其實就是一種快捷圖標,背后指向了另外一個文件。

這7類文件,其中普通文件數量最多,其次是目錄文件,然后才是其它類的文件。


2.2 如何判斷文件的類型
(1)ls查看- d c l b s p符號來區分


(2)可以使用file命令來查看

1)查看普通文件

(a)如果查看的是文本文件
會提醒你,它是文字編碼格式的文件。

(b)如果你查看的是純二進制文件(機器碼)

會提示你,這是一個可以運行的可執行文件。

a.out: ELF 64-bit LSB executable, x86-64, dynamically linked,
/lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, not strippe

· ELF:Linux下可執行文件的格式,Windows下的可執行文件是PE格式
對應格式的可執行文件,只能在對應的OS下運行。

· 64-bit:文件里面的機器指令是64位的

· LSB:小端序,C語言里面有詳細介紹大小端序

· executable:明確告訴你,該文件是一個可執行文件

· x86-64:運行的是intel的i386的、64位的cpu

· dynamically linked, /lib64/ld-linux-x86-64.so.2
程序使用的庫是動態鏈接庫,庫名叫/lib64/ld-linux-x86-64.so.2


· for GNU/Linux 2.6.32:運行的系統是Linux系統(ubuntu),Linu x 2.6.32是ubuntu所用Linux內核的版本號


· not strippe:程序沒有被瘦身,里面包含有各種用於調試用的信息,當這個程序最終發布時,會使用strip命令
為程序瘦身,去除里面的無用信息,讓程序變的更小。


2.3 如何對這些文件進行IO操作

在我們整個課程中,這7類文件都會涉及到,對文件進行IO操作時,使用的都是第1章講的各種文件io函數,從這里也可以看出,
所以第1章的內容很重要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM