使用C直接读/写磁盘[重复]

Posted

技术标签:

【中文标题】使用C直接读/写磁盘[重复]【英文标题】:Reading/Writing to Disk directly using C [duplicate] 【发布时间】:2015-12-18 04:10:51 【问题描述】:

我知道如何使用 FILE 指针在 c 中读取/写入文件。但我想提前一步学习如何直接读取/写入磁盘分区。另外,写入之间有什么区别到文件和磁盘。我也可以操作磁盘上已经存在的内容,例如视频、图像等。

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

TIA。

【问题讨论】:

【参考方案1】:

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 访问权限。

警告!

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

【讨论】:

通常linux会阻止打开一个挂载的分区。

以上是关于使用C直接读/写磁盘[重复]的主要内容,如果未能解决你的问题,请参考以下文章

脏写 脏读 不可重复读 幻读 读偏差 写偏差 丢失更新 示例

mysql查询重复数据sql,移动架构师成长路线

使用Concurrent Dispatch Group进行线程安全读/写阵列访问[重复]

具有并发调度组的线程安全读/写数组访问[重复]

spark计算模型

#yyds干货盘点# MySQL - 存储引擎