首頁>Club>
聽說linux下一切可執行程式是二進位制檔案?win的可執行程式不也是二進位制檔案嗎?
15
回覆列表
  • 1 # TheSilentTime

    這是邏輯上的一種說法,並不能按照字面意思理解,並不是說一切都是檔案。

    嚴格說應該是普通檔案,目錄,字元裝置塊裝置,各種網路裝置都按照檔案來看待。“一切皆檔案”可以上升到哲學範疇的一種理解,linux作業系統為所有的這些東西提供統一的操作介面。

    大概就這麼個意思吧。展開說就太多了。

  • 2 # 光明右使8787

    這是個很古老的話題。Linux設計之初核心層和使用者層是嚴格分離的,使用者層要訪問核心就要呼叫兩個系統呼叫,read和write,比如訪問串列埠,就是讀寫/dev/com裝置,read接收資料,write傳送資料,那麼這個串列埠裝置就相當於一個檔案了。後來隨著硬體裝置效能越來高,這種copy to user 的方式效率實在是有點捉襟見肘,就出現了核心內層直接map到使用者空間的捷徑,使用者層可以zero copy方式訪問核心資料,效率也就大大提升了。所以現在的Linux對裝置的訪問並不是單純的read write和ioctl,還有map方式,像著名的uio框架,就可以把核心記憶體對映到使用者空間讓應用程式直接讀寫。

  • 3 # 新乞丐9360348467l84

    看了下這裡的回答,本質上都沒有回答到點子上。這個如果你做過一些底層系統維護工作,又或者做過點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系統喜歡用管道的原因,因為都他媽的是檔案操作,想怎麼玩就怎麼玩

  • 4 # 灰棕熊

    如果有一個(核心)物件,對它的操作可以歸結為三類,“讀/寫/發控制指令”,那麼這個物件就可以包成一個“裝置檔案”來讓應用層訪問,無須增設新的system call。舉個例子,kvm模組,用來支援VT-X 模式下的虛擬機器,聽著很高大上吧?虛擬機器建立,啟動,暫停,強停,銷燬,模中斷髮生,模擬io,怎麼著也得十個八個system call吧? 一個沒有!使用者態程序qemu透過/dev/kvm這個系統檔案來和核心模組kvm互動,實現所有虛擬機器功能。能“讀,寫,發控制指令”的就是檔案,那還有什麼不能是檔案?

  • 中秋節和大豐收的關聯?
  • 鞋油弄到衣服上了怎麼能洗的很乾淨?