Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c获取使用dd命令创建的文件的大小_C_Linux_File Io_Dd - Fatal编程技术网

如何使用c获取使用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命令创建一个文件,如下所示:

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块大小”。(请参阅前面注释中的链接)它与文件大小无关。