使用 Fuse 和 java 17 編寫一個簡單的檔案系統
FUSE(使用者空間中的檔案系統)允許您在實現其介面時建立使用者空間檔案系統。FUSE 專案由兩個元件組成:FUSE 核心模組和 libfuse 使用者空間庫。我們的實現將使用 libfuse 的高階 API。它提供了掛載檔案系統、解除安裝檔案系統、從核心讀取請求以及發回響應的功能。
Project Panama 是 Java 語言改進的集合。該專案的目標是豐富和改進 Java 和本地(外部)介面之間的連線,這些介面通常由用 C 編寫的應用程式使用。
Panama 由以下 JEP(JDK 增強提案)組成:
- Foreign-Memory Access API JEP:JEP-370、JEP-383
- 外部連結器 API JEP:JEP-389
- 向量 API JEP:JEP-338
我們將專注於 Foreign Linker API,因為它提供對本機程式碼的純 Java 訪問。使用外部連結器的另一個好處是它應該具有可比的效能或比 JNI 更好。
本文目標是探索 Project Panama 的外部連結器功能並建立我們的簡單檔案系統。我們將使用 Java 17 和 FUSE 來做到這一點。我們將研究如何進行向上呼叫、向下呼叫和使用記憶體地址來建立我們的記憶體檔案系統。
安裝
在開始之前,請確保您在 Linux/Mac 系統上安裝了 FUSE(如果您使用的是 Windows,則可以使用 WSL1 或 WSL2 來跟隨或任何 Linux VM)。我使用 libfuse 3.10.5 作為示例。在終端中執行ldconfig -p | grep libfuse 將顯示安裝的 Libfuse 版本。如果未安裝 Libfuse,您將不會得到任何輸出。
我們還需要 Jextract,它是一個從 C 標頭檔案生成 Java 檔案的工具,並且僅在 Panama 早期訪問版本中可用。轉到https://jdk.java.net/panama/併為您的系統下載最新版本並解壓縮。我們只需要這個特定版本的 Java 來生成 Java 檔案。我們要構建的專案可以使用任何 Java 17 GA 版本。
此外,在 ( https://github.com/libfuse/libfuse/releases )下載並解壓縮安裝在系統上的 Libfuse 原始碼版本,我們將使用它作為 Jextract 的輸入。
詳細點選標題
相關文章
- 用Python寫一個FUSE(使用者態檔案系統)檔案系統Python
- FUSE檔案系統
- 使用FUSE和ntfs-3g解決Mac上NTFS檔案系統無法寫入Mac
- 用Java編寫一個最簡單的桌面程式Java
- 用Vue編寫一個簡單的仿Explorer檔案管理器Vue
- javascript編寫一個簡單的編譯器JavaScript編譯
- GFS(谷歌檔案系統)的JAVA簡單實現谷歌Java
- 使用 Vala 編寫一個簡單的文字識別程式
- 用C++編寫一個簡單的員工工資管理系統~C++
- 編寫一個簡單的智慧合約
- 編寫一個簡單的babel外掛Babel
- 編寫一個簡單的JavaScript模板引擎JavaScript
- 編寫一個非常簡單的 JavaScript 編輯器JavaScript
- 使用簡單工廠寫一個可複用的批量檔案修改工具
- 編寫一個檔案補丁
- [Vue]寫一個簡單的檔案上傳控制元件Vue控制元件
- .yaml引數檔案的編寫和使用YAML
- 用java寫一個貪食蛇的簡單AIJavaAI
- 一個簡單的ipf配置檔案
- 如何簡單的在TF卡上做一個Linux的檔案系統Linux
- 在Linux下製作一個簡單的給ARM開發板使用的檔案系統Linux
- 一個簡簡單單的紅點系統框架框架
- znai: 使用Markdown編寫Java文件系統AIJava
- 教你如何編寫第一個簡單的爬蟲爬蟲
- 編寫簡單的windows bat批處理指令碼檔案WindowsBAT指令碼
- 使用ant編譯Java檔案(一)編譯Java
- Python編寫簡單的學生資訊管理系統Python
- 一個簡單的檔案管理程式 (轉)
- 一個最簡單的XML檔案(轉)XML
- 【python系統學習17】python中的檔案讀寫Python
- 寫了一個簡單的Linux Shell用來下載檔案Linux
- 各檔案系統對單個檔案大小的限制
- Python編寫一個簡單計算器Python
- 一個簡單的Webmail系統 (轉)WebAI
- 一個簡單的考勤系統 (轉)
- 效能測試: 編寫一個 Locust 檔案
- 關於檔案讀寫使用RandomAccessFile類的一些簡單操作randomMac
- 編寫簡單的Java程式碼:HelloWoridJava