作爲一個大學項目,我需要從一個文件中實現一個基本的文件系統。那麼我該怎麼做呢?我需要知道哪些事情?這些要求包括在後臺進行守護進程。同時使用該系統的應用程序需要使用Unix域套接字實現基本文件系統
文件系統應具有以下功能連接到服務器:與它們的大小一起存儲
- 列表文件。
- 創建文件
- 允許更改文件
- 刪除文件
作爲一個大學項目,我需要從一個文件中實現一個基本的文件系統。那麼我該怎麼做呢?我需要知道哪些事情?這些要求包括在後臺進行守護進程。同時使用該系統的應用程序需要使用Unix域套接字實現基本文件系統
文件系統應具有以下功能連接到服務器:與它們的大小一起存儲
檢查了這一點,如果它可以提供幫助。 http://www.geocities.ws/ravikiran_uvs/articles/rkfs.html
如果您想在用戶空間創建文件系統,FUSE可以爲您提供幫助。 http://fuse.sourceforge.net/
該鏈接似乎很有用... – 5lackp1x3l0x17 2010-02-03 05:06:58
@Gael鏈接立即更新 – kumar 2017-07-07 08:24:46
最簡單的方法是建立一個模板來存儲數據,並將文件解析到內存中,當然這並不是最有效的。
喜歡的東西...
SOME /位置/文件名>>>文件 內容這裏,等等等等 < < < SOME /其它/位置/ File2Name >>> 的另一個內容文件在這裏 < < <
然後列出一個目錄,使用正則表達式查找>>>結尾的所有行,然後解析到第X個斜槓(基於搜索的文件夾斜線的數量),並做基於您是否希望這是區分大小寫的敏感搜索。當然,正如我提到的將它加載到內存中,你可以搜索一個key-> value的hashmap,這可能會簡單得多。
文件系統基本上是一個文件數據庫。您需要的主要功能是用於存儲字節偏移量和文件長度的查找表。文件名也可以存儲在表中,或者可以存儲在每個偏移量的前幾個字節中。如果您將文件系統設置爲固定大小,這對您來說會容易得多。
這與FAT文件系統的工作原理類似。
您還可以查看http://en.wikipedia.org/wiki/Database_storage_structures,因爲在最低級別文件系統和數據庫非常相似。
這是一個非常非常基本的FUSE實現的an example,它由一個榮耀的共享內存段(xenstore)支持。它是我維護的原始xenstore FUSE文件系統的一個分支。
您還可以找到一些代碼來向您展示如何使Valgrind在調試FUSE實現時更加有用。
你寫的打開/創建/讀/寫/截斷功能/ GETATTR /等,並通過他們融合(行號從鏈接的例子):
343 static struct fuse_operations const xsfs_ops = {
344 .getattr = xsfs_getattr,
345 .mknod = xsfs_mknod,
346 .mkdir = xsfs_mkdir,
347 .unlink = xsfs_rm,
348 .rmdir = xsfs_rmdir,
349 .truncate = xsfs_truncate,
350 .open = xsfs_open,
351 .read = xsfs_read,
352 .write = xsfs_write,
353 .readdir = xsfs_readdir,
354 .create = xsfs_create,
355 .destroy = xsfs_destroy,
356 .utime = xsfs_utime,
357 .symlink = xsfs_symlink,
358 .init = (void *)xsfs_init
359 };
正如你所看到的,它極自我解釋。稍加搜索會導致發現很多FUSE實現的基本文件支持示例。
我強烈建議完全在用戶空間中完成,除非您有足夠的時間熟悉內核。
我們可以在這裏做一些假設: 我們並沒有創建一個真正的文件系統:也就是說,我們並不期望使用正常的ls或dir命令來查看事情。相反,我們正在實現一種通過套接字通過自定義接口公開文件的服務。我們正在編寫服務器和客戶端庫。服務器的數據存儲在一個文件中。 這是正確的嗎? – 2010-02-03 13:16:30
類似稍微更通用的問題:http://stackoverflow.com/questions/4714056/how-to-implement-a-very-simple-filesystem – 2015-05-08 07:57:08