{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

Linux中“一切皆文件”是什么意思?

AlphaWalletAlphaWallet 回答0 收藏1
問題描述:聽說linux下一切可執行程序是二進制文件?win的可執行程序不也是二進制文件嗎?
收藏問題

4條回答

jeyhan

jeyhan

回答于2022-06-28 11:54

簡單來說,posix的文件讀寫接口可以操作一切。

評論0 贊同0
  •  加載中...
crelaber

crelaber

回答于2022-06-28 11:54

這是個很古老的話題。Linux設計之初內核層和用戶層是嚴格分離的,用戶層要訪問內核就要調用兩個系統調用,read和write,比如訪問串口,就是讀寫/dev/com設備,read接收數據,write發送數據,那么這個串口設備就相當于一個文件了。
后來隨著硬件設備性能越來高,這種copy to user 的方式效率實在是有點捉襟見肘,就出現了內核內層直接map到用戶空間的捷徑,用戶層可以zero copy方式訪問內核數據,效率也就大大提升了。
所以現在的Linux對設備的訪問并不是單純的read write和ioctl,還有map方式,像著名的uio框架,就可以把內核內存映射到用戶空間讓應用程序直接讀寫。

評論0 贊同0
  •  加載中...
jemygraw

jemygraw

回答于2022-06-28 11:54

看了下這里的回答,本質上都沒有回答到點子上。這個如果你做過一些底層系統維護工作,又或者做過點linux開發,就會理解了。

舉兩個例子,如何在linux中列舉所以開啟了的進程?除了系統api以外,其實你還可以ls一下/proc目錄,那里每一個進程會對應一個文件夾,文件夾的名字是pid,在每個進程的文件夾下還會有這個進程的詳細信息,比如cmdline文件指的是這個進程的啟動命令和參數。再比如如何得到當前系統的硬件信息?你可以直接查看/dev目錄,里面會分門別類地給到你所有硬件信息。而且很多都是可以直接當做txt文件打開的。系統會把很多硬件直接模擬成文件,這樣你可以在沒有具體系統api調用文檔的情況下,通過讀寫文件來完成操作硬件。比如一些簡單系統顯示,就可以直接讀寫fbcon文件來完成,以及以前打印機,掃描儀等等的操作,就可以通過寫入打印機文件,以及讀取掃描儀文件來完成。

除了這些以外,因為是萬物文件的系統,可以通過編寫簡單的編寫各種shell,或者說類似于windows的bat文件來完成復雜的系統api操作,因為他們只是文件。舉個例子,通過命令行可以直接裸寫/dev/sda的二進制內容來完成分區和格式化工作。又比如mount命令本質上也是一種轉換器,把硬件文件轉換成分區文件夾。你對于分區內文件的操作,最后就變成了對硬件文件的操作,最后通過驅動變成實際的硬件指令。又比如我可以通過直接讀寫/dev內部的文件控制筆記本背板a面的呼吸燈顏色。

本質上,萬物皆文件做的事情是,把你不熟悉的系統api,驅動,變成固定路徑下的文件操作。這樣你隨便用任何一個編程語言和環境都可以驅動和控制系統表現。再比如你可以直接用nodejs,python,c,java,等等各種語言來裸寫控制,而不用到處尋找各種支持庫和系統包。這也是當初為什么類unix系統喜歡用管道的原因,因為都他媽的是文件操作,想怎么玩就怎么玩

評論0 贊同0
  •  加載中...
Eminjannn

Eminjannn

回答于2022-06-28 11:54

就是一切皆文件╮(╯_╰)╭

評論0 贊同0
  •  加載中...

相關問題

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<