Linux一切皆文件

一切皆文件

  • 首先一般在windows中是文件的東西,它們在linux中也是文件
  • 其次一些在windows中不是文件的東西, 好比進程, 磁盤, 也被抽象成了文件. 你可使用訪問文件的方法訪問它們得到信息.
  • 再其次,一些很離譜的東西, 好比管道, 好比/dev/zero(一個能夠讀出無限個0的文件) /dev/null(一個重定向進去以後就消失了的文件). 它們也是文件
  • 再再其次, 相似於socket這樣的東西, 使用的接口跟文件接口也是一致的.

帶來的好處就是, 你可使用同一套api(read, write)和工具(cat , 重定向, 管道)來處理unix中大多數的資源.這就使得組合了簡單的命令和字符處理工具(awk, sed)以後, shell腳本就能發揮出強大的功能.html

文件分類

Linux下文件通常有以下幾種類型:mysql

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),因此這裏須要有比較系統全面的知識才能看的比較通透linux

詳細的系統調用說明參考 man或系統文檔 man-fileopengit

內核實現

代碼示例 / github

相關文章
相關標籤/搜索