使用C直接读/写磁盘

时间:2015-09-21 12:44:28

标签: c file filesystems

我知道如何使用FILE指针读取/写入c中的文件。但我想先走一步,学习如何直接读/写磁盘分区。还有什么区别写到文件和磁盘。我也可以操作磁盘上已有的内容,如视频,图像等。

我在Linux 14.04上使用C语言,gcc作为我的编译器。

TIA。

1 个答案:

答案 0 :(得分:0)

UNIX / Linux系统的一个好处是你想要访问的任何东西都是一个文件。

Linux有一个/dev文件系统,它有特殊的文件,实际上是块和字符设备。其中包括原始磁盘分区。如果您运行df -k,您将看到与当前安装的文件系统相关联的设备。

在我的一个系统上,此命令输出以下内容:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/vg0-root   1040280    427008    560844  44% /
/dev/mapper/vg0-var    4161216   3275900    675604  83% /var
/dev/mapper/vg0-usr   30559268  14297456  14721716  50% /usr
/dev/mapper/vg0-prod  30526500  11905152  17082892  42% /prod
/dev/mapper/vg0-tmp    4161216    175168   3776336   5% /tmp
/dev/sda1               256681     28231    215196  12% /boot

从这个例子中,我们可以看到/var文件系统与特殊文件/dev/mapper/vg0-var相关联。因此,如果您打开该文件,您将可以访问原始文件系统。然后,您需要准确了解文件系统的布局,以找到您要查找的内容。

请注意,要执行此操作,您需要root访问权限。

警告!

以这种方式访问​​已挂载的文件系统通常是一个坏主意。操作系统会将写入缓存到文件系统,因此磁盘上的物理内容可能与操作系统所说的不匹配。以这种方式直接写入文件系统会损坏文件系统,因为您绕过了操作系统的缓存机制。