如何使用c获取使用dd命令创建的文件的大小
我使用dd命令创建一个文件,如下所示:如何使用c获取使用dd命令创建的文件的大小,c,linux,file-io,dd,C,Linux,File Io,Dd,我使用dd命令创建一个文件,如下所示: dd if=/dev/zero of=1g.dd bs=1M count=512 seek=512 当我运行命令ls 1g.dd,它的大小是1g,运行du 1g.dd,它的大小是512M 在c库中有一个struct stat来读取文件大小,但它只能读取1G大小,现在我如何才能得到512M大小,这是该文件的真实大小 现在我知道的唯一方法是解析shell命令du的输出。我可以直接从文件中读取大小吗?您可以使用struct stat的st_blocks成员,它
dd if=/dev/zero of=1g.dd bs=1M count=512 seek=512
当我运行命令ls 1g.dd
,它的大小是1g,运行du 1g.dd
,它的大小是512M
在c库中有一个struct stat
来读取文件大小,但它只能读取1G大小,现在我如何才能得到512M大小,这是该文件的真实大小
现在我知道的唯一方法是解析shell命令du的输出。我可以直接从文件中读取大小吗?您可以使用
struct stat
的st_blocks
成员,它告诉您有多少512字节的块(这在Linux上有效,在其他操作系统上可能不同,并且可能取决于文件系统)已分配给文件 您可以使用struct stat
的st_blocks
成员,它告诉您有多少512字节的块(这在Linux上有效,在其他操作系统上可能不同,并且可能取决于文件系统)已分配给该文件 顺便说一句,如果你做一个du--表观尺寸,你将得到与ls报告的1G结果相同的结果。顺便说一句,如果你做一个du--表观尺寸,你将得到与ls报告的1G结果相同的结果。这很有效,非常感谢!还有一件事,为什么是512,st_blksize的。请参阅:“st_块和st_blksize的值与f_bsize(来自)结构成员之间没有相关性。”st_blksize
是“此对象的特定于文件系统的首选I/O块大小”。(请参阅前面评论中的链接)它与文件大小无关。非常感谢!还有一件事,为什么是512,st_blksize的。请参阅:“st_块和st_blksize的值与f_bsize(来自)结构成员之间不存在相关性。”st_blksize
是“此对象特定于文件系统的首选I/O块大小”。(请参阅前面注释中的链接)它与文件大小无关。