当前位置: 技术问答>linux和unix
stat函数为什么有时不能正确获取文件实际大小
来源: 互联网 发布时间:2016-06-14
本文导语: UNIX下的C++程序中调用stat函数来获取文件。为什么有的时候获取出来的值和实际值不一样呢。然后我在程序加了一个判断 if(st_buf.st_size!=实际大小) 就再stat获取一遍大小,这次文件大小就对了。 各位有遇到过这样的...
UNIX下的C++程序中调用stat函数来获取文件。为什么有的时候获取出来的值和实际值不一样呢。然后我在程序加了一个判断
if(st_buf.st_size!=实际大小) 就再stat获取一遍大小,这次文件大小就对了。
各位有遇到过这样的情况吗?
if(st_buf.st_size!=实际大小) 就再stat获取一遍大小,这次文件大小就对了。
各位有遇到过这样的情况吗?
|
我不是经常用,但是没有发现有类似问题。。
|
楼主可以提供一个可以重现的例子,可以让我们分析一下。
比如一个什么文件名?内容贴出来,出现了这个问题的。随便代码也贴来
|
这是 有可能的
比如 stat 和 du 一个文件 有可能大小不同
APUE有过说明 说是 文件里有空洞 就会有这种情况,不知道是不是你想知道的。
比如 stat 和 du 一个文件 有可能大小不同
APUE有过说明 说是 文件里有空洞 就会有这种情况,不知道是不是你想知道的。
|
stat出来的结果和ls -l的结果是一样的.
会不会是这个文件还有其他进程在使用
会不会是这个文件还有其他进程在使用
|
Q. What is 'holes' in files?
A. (By Andrew Gierth )
The issue of 'holes' in files is thus:
Suppose a program creates a new file, seeks to a large offset, and then
writes 1 byte.
The file now consumes only 1 block of disk space, but appears to be large
(both in the byte size returned by stat(), and to a program that reads it
sequentially). The space that was never written to reads back as all
zeros, but consumes no space. This is referred to as a 'sparse file'.
The most common situation that causes these is use of the dbm package,
which takes advantage of this ability.
A. (By Andrew Gierth )
The issue of 'holes' in files is thus:
Suppose a program creates a new file, seeks to a large offset, and then
writes 1 byte.
The file now consumes only 1 block of disk space, but appears to be large
(both in the byte size returned by stat(), and to a program that reads it
sequentially). The space that was never written to reads back as all
zeros, but consumes no space. This is referred to as a 'sparse file'.
The most common situation that causes these is use of the dbm package,
which takes advantage of this ability.