在linux
中,一切(或幾乎一切)都是檔案。
檔案和裝置
硬體裝置在
linux
作業系統中通常被對映為檔案。可以使用
mount
命令載入
cd-rom
、windows
下的檔案系統或者其他的裝置。
unix
和linux
中比較重要的裝置檔案有三個:
1. dev/console
該裝置代表系統控制台,錯誤資訊和診斷資訊通常會被傳送到這個裝置上。在現代的工作站和
linux
上,它通常是「活躍」的虛擬控制台;而在
x 視窗系統中,它會是螢幕上乙個特殊的控制台視窗。
2. dev/tty
如果乙個程序有控制終端的話,那麼特殊檔案
/dev/tty
就是這個控制終端(鍵盤、顯示屏或者視窗)的別名(邏輯裝置)。
注意:雖然/dev/console
裝置只有乙個,但通過
/dev/tty
卻能夠訪問許多不同的物理裝置。
3. /dev/null
這是空裝置,所有寫向該裝置的輸出都將被丟棄。
提示:還有乙個特殊裝置
/dev/zero
經常被用到,它的作用是以內容為
null
位元組的原始檔來來建立零長度檔案。它經常用在
dd 命令的
if 引數中。
掃瞄目錄
與目錄操作相關的函式在
dirent.h
標頭檔案中宣告。其中,目錄的讀寫函式在《
unix
環境下c 語言程式設計及專案實踐》的
讀書筆記 3
中有過介紹。除了
opendir
、closedir
和readdir
這三個常見的函式外,還有兩個函式:
telldir
和seekdir 。
telldir
函式的返回值記錄了乙個目錄流裡的當前位置;接著,我們可以在隨後的
seekdir
呼叫中利用這個值將目錄指標重置到之前的位置。 在
linux
系統上乙個常見的問題就是對目錄進行掃瞄,也就是確定乙個特定目錄下存放的檔案。在上述提到的讀書筆記中曾給出了乙個掃瞄例項,但是該例項只是掃瞄了當前目錄下的檔案,並沒有深入到子目錄的層面。這裡給出乙個掃瞄當前目錄下(包含子目錄)所有檔案的例項
printdir /*
* function: print all files and directories under 'dir' directory
* paremeters:
* dir [in] point to the directory needed to print
* depth [in] width align to left, incrementing while nested */
void printdir(char *dir, int depth)
chdir(dir);
while((entry = readdir(dp)) != null)
else
printf("%*s%s/n", depth, "", entry->d_name);
}
chdir("..");
closedir(dp); }
提示:為了在輸出時對於不同層次的目錄有縮排,這裡使用了可變字段寬度
%*s。其中
* 可以由乙個整形值來指定,代表了在輸出後面字串時所要求的寬度。
/proc
檔案系統
linux
提供了乙個特殊的檔案系統
procfs
,它通常表現為
/proc
目錄。該目錄中包含了許多特殊檔案以允許對驅動和核心資訊進行高層訪問。只要應用程式有正確的訪問許可權,它們就可以通過讀寫這些檔案來獲得資訊或設定引數。
/proc
目錄中的檔案會隨系統的不同而不同,當
linux
版本中有更多的驅動和設施支援
procfs
檔案系統時,該目錄中就會包含更多的檔案。不過,該目錄下有許多東西是在任何
linux
系統中都存在的。
大多情況下,只需要直接讀取這些檔案 就可以獲取資訊。比如
/proc/cpuinfo
、/proc/meminfo
、/proc/version
和/proc/net/sockstat
就分別給出了
cpu 、記憶體、
linux
版本和網路套接字的資訊。
其實,/proc
目錄下的有些檔案不但可以讀取,還可以修改。比如說,系統中所有執行的程式同時能夠開啟的檔案總數是
linux
核心的乙個引數。它的值可以從
/proc/sys/fs/file-max
檔案得到;同樣地,你也可以直接修改該檔案來更改可以直接開啟的檔案總數。
提示:對/proc
目錄中檔案進行寫操作需要超級使用者的許可權。在修改資料時一定要小心,寫入不當的值很可能會導致嚴重的後果。
/proc
目錄中還有一類檔案以數字命名 。比如,當我們使用
ps命令檢視當前正在執行的程序時,會顯示每個程序的
pid。每個程序都會對應
/proc
目錄下乙個以該
pid值命名的檔案。如果你要檢視該程序的具體資訊,可以直接讀取檔案
/proc/(pid)
。在列出的檔案中,
cmdline
檔案會顯示該程序由誰啟動的;你可以使用
cat命令或者
od命令來檢視。
Python學習筆記 03 檔案掃瞄
檔案掃瞄,想必大家都很清楚這個概念,就是讀取外部檔案 比如儲存在硬碟上的資料 至記憶體 計算機主存 中,這是乙個輸入流的概念。現在我想就這個問題展開敘述一下 檔案,輸入流,二進位制檔案,文字檔案,緩衝區,塊,行,字元,檔案迭代器,迴圈 大家可能會問,為什麼要讀取檔案資料呢?其實有些時候,一些資料儲存...
python筆記03 檔案操作
建立乙個檔案名字為filename 內容是bj shgd twf open filename r encoding utf 8 print f.encoding utf 8 print f.fileno 3f open filename encoding utf 8 data f.read prin...
Linux學習筆記5 檔案
在 linux 中,所有的東西都被當成檔案 檔案許可權的第乙個字母代表檔案的型別 b 塊裝置檔案 c 字元裝置檔案 l鏈結檔案 d 目錄 一般檔案 許可權型別 r w x 擁有者u 組g 其他使用者o 執行 x 權力 沒有這個權利,無法進入目錄,建新檔案,以及查詢目錄下檔案和內容的許可權。讀權利 讀...