用C打印缓冲区中的位?

时间:2014-06-25 00:31:28

标签: c io fwrite

C在文件中写入和读取特定数量的位的最佳方式是什么,比如说整数的前半部分的前16位或12。除了使用fwrite之外,我似乎无法在其上找到任何线程或文档。我可能不确定,但我不认为我可以写一个特定数量的位,并且需要一个缓冲区,但任何人都可以指导我以正确的方式执行此操作吗?

1 个答案:

答案 0 :(得分:2)

使用可用的API,您一次可以在文件中写入的最小信息量为1个字节。要实现您想要的功能,您必须从文件中读取字节,使用按位运算符对其进行修改并将其写回文件。如果您将数据作为流写入,则必须在每个字节完成或完成后调用fwrite。然后,考虑到文件系统将跟踪文件大小(以字节为单位)这一事实,您必须使用零或其中任何一个更适合填充最后一个字节。否则,需要一个提供位级操作的文件系统以及操作系统级别的相应支持。

实际上,可以写入磁盘的最小物理数据量是512字节的扇区,最近是4096字节。在文件系统级别,几个扇区被捆绑在一起成为一个块。操作系统"隐藏"这个事实让我们可以处理单个字节。

似乎使这个问题声音愚蠢的事实是我们已经习惯了当前的文件抽象,它变得像第二天性。然而,在幕后,很多人都在支持这种错觉。