一.Linux中文件
可以分為4種:普通文件、目錄文件、鏈接文件和設(shè)備文件。
1、普通文件
?? 是用戶日常使用最多的文件,包括文本文件、shell腳本、二進(jìn)制的可執(zhí)行和各種類型的數(shù)據(jù)。
??? ??? ls -lh 來查看某個文件的屬性,可以看到有類似 -rw-r--r-- ,值得注意的是第一個符號是 - ,這樣的文件在Linux中就是普通文件。這些文件一般是用一些相關(guān)的應(yīng)用程序創(chuàng)建,比如圖像工具、文檔工具、歸檔工具... .... 或 cp工具等。這類文件的刪除方式是用rm 命令;
2、目錄文件
????在linux中,目錄也是文件,它們是包含文件名和子目錄名以及指向那些文件和子目錄的指針
當(dāng)我們在某個目錄下執(zhí)行,看到有類似 drwxr-xr-x ,這樣的文件就是目錄,目錄在Linux是一個比較特殊的文件。注意它的第一個字符是d。創(chuàng)建目錄的命令可以用 mkdir 命令,或cp命令,cp可以把一個目錄復(fù)制為另一個目錄。刪除用rm 或rmdir命令。
3、鏈接文件
鏈接文件類似于Windows中的“快捷方式”。
是通過ln -s 源文件名 新文件名?? 來創(chuàng)建的。
4、設(shè)備文件
包括兩種,塊設(shè)備文件,另一種是字符設(shè)備文件
? ? ? ?塊設(shè)備文件是指數(shù)據(jù)的讀寫,它們是以塊為單位的設(shè)備,如硬盤光驅(qū)
? ? ? ?字符設(shè)備主要是指串行端口的接口設(shè)備,如網(wǎng)卡等。
二、文件描述符?
1、文件描述符及其作用
??內(nèi)核(kernel)利用文件描述符(file descriptor)來訪問文件。文件描述符是非負(fù)整數(shù)。打開現(xiàn)存文件或新建文件時,內(nèi)核會返回一個文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。 對于 Linux 而言,所有對設(shè)備和文件的操作都使用文件描述符來進(jìn)行的。文件描述符是一個非負(fù)的整數(shù),它是一個索引值,并指向內(nèi)核中每個進(jìn)程打開文件的記錄表。當(dāng)打開一個現(xiàn)存文件或創(chuàng)建一個新文件時,內(nèi)核就向進(jìn)程返回一個文件描述符;當(dāng)需要讀寫文件時,
也需要把文件描述符作為參數(shù)傳遞給相應(yīng)的函數(shù)。
通常,一個進(jìn)程啟動時,都會打開 3 個文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯處理。這3 個文件分別對應(yīng)文件描述符為 0、1和2也就是宏替換 STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO,鼓勵讀者使用這些宏替換)。
查看LINUX默認(rèn)的文件描述符,總共有1024個,對于大多數(shù)情況下是夠用的:
# ulimit -n
查看進(jìn)程id
#ps aux
獲取某進(jìn)程文件描述符
cd /proc/[pid]/fd
[pid] 是對應(yīng)的進(jìn)程的pid.
#cd /proc/1473/fd
#sysctl -a | grep fs.file
nr就是已經(jīng)用的
三.dup和dup2
dup和dup2也是兩個非常有用的調(diào)用,它們的作用都是用來復(fù)制一個文件的描述符。
它們經(jīng)常用來重定向進(jìn)程的stdin、stdout和stderr。
這兩個函數(shù)的 原形如下:
#include