一切皆文件
- 首先通常在windows中是文件的東西,它們在linux中也是文件
- 其次一些在windows中不是文件的東西, 比如進程, 磁盤, 也被抽象成了文件. 你可以使用訪問文件的方法訪問它們獲得信息.
- 再其次,一些很離譜的東西, 比如管道, 比如/dev/zero(一個可以讀出無限個0的文件) /dev/null(一個重定向進去之后就消失了的文件). 它們也是文件
- 再再其次, 類似於socket這樣的東西, 使用的接口跟文件接口也是一致的.
帶來的好處就是, 你可以使用同一套api(read, write)和工具(cat , 重定向, 管道)來處理unix中大多數的資源.這就使得組合了簡單的命令和字符處理工具(awk, sed)之后, shell腳本就能發揮出強大的功能.
文件分類
Linux下文件一般有如下幾種類型:
1.普通文件 # xxx.log 2.目錄 # /usr/ /home/ 3.字符設備文件 # /dev/tty的屬性是 crw-rw-rw- ,注意前面第一個字符是 c ,這表示字符設備文件,比如貓等串口設備 4.塊設備文件 # /dev/hda1 的屬性是 brw-r----- ,注意前面的第一個字符是b,這表示塊設備,比如硬盤,光驅等設備 5.套接字文件 # /var/lib/mysql/mysql.sock srwxrwxrwx 6.管道 # pipe 7.符號鏈接文件 # softlink...
文件操作系統調用
雖然對文件的操作就那么幾個,但是由於linux把所有的設備、文件的操作都統一了,所以這些系統調用會有很多參數來處理各種類型的文件,所以還是有點復雜的,這里的復雜有一點是如果你還沒有全面掌握各種類型的文件操作,讀文檔的時候就會遇到某些參數一臉懵逼,不知所雲,比如 O_NONBLOCK 這個標志對普通的文件是不起作用的,對什么文件起作用?那你得操作塊設備,字符設備,FIFOs (named pipes),所以這里需要有比較系統全面的知識才能看的比較通透
詳細的系統調用說明參考 man或系統文檔 man-fileopen
