可以直接在文件系统中构建对应用程序的支持吗?

时间:2011-12-03 14:11:00

标签: c linux macos filesystems

我想知道是否可以编写一个可以访问外部文件系统的应用程序,但不需要从操作系统支持该文件系统。例如,我想用C语言编写一个在Mac OS X上运行的应用程序,它可以从ext2 / ext3格式的磁盘中浏览/复制文件。当然,你必须通过应用程序进行所有传输(不是通过使用cp或Finder的系统),但这对我的目的来说是可以的。这可能吗?

4 个答案:

答案 0 :(得分:5)

有一些用户空间库允许您访问文件系统。

Linux-NTFS库(libntfs)允许您访问NTFS文件系统,并且有ntfsfix等用户空间程序可以对文件系统执行操作。

对于ext2,ext3和ext4文件系统,

E2fsprogs也是如此。

正如Basile所提到的,Mtools是另一个提供FAT分区访问权限的工具。

甚至有一个程序可以完全满足您在Windows上的需求。它被称为ext2explore,允许您从Windows访问ext2分区。

答案 1 :(得分:3)

有可能。例如,GNU mtools实用程序正在为MS-DOS FAT文件系统执行此操作(假设有一种访问原始设备或分区的方法)。

但是,内核中的文件系统通常都经过了很好的测试和优化。

答案 2 :(得分:0)

是和否。对于常规用户,通常无法访问应用程序,因为对块设备的访问仅限于root用户。每个块设备都应该为所需的块设备提供读/写操作。这最多需要服务器/客户端方法,在服务器上启动服务并配置为按块设备方式提供权限。

您可以使用MacFUSE实现更简单的替代方案。

看这里:
http://code.google.com/p/macfuse/
http://groups.google.com/group/macfuse?pli=1

MacFuse项目似乎不再适用,但可以为您的项目提供一个起点。

以root chmod 666 /dev/diskN

为基础的以下方法采用了肮脏而快速的方法

答案 3 :(得分:0)

您可以从应用程序中劫持系统调用和库调用,然后将读/写重定向到KV存储或分布式数据库层等任何内容(使用您不支持的“虚拟设备”的常规调用)。

然后,可能性是无限的,因为当有人要求它们时,你不必到达物理/虚拟设备(解决特权问题)。