【发布时间】:2021-08-23 05:07:36
【问题描述】:
我使用lseek 只是为了查找文件的大小,而lseek 返回的字节数少于文件的实际大小。我认为代码是正确的,我无法解释为什么会发生这种情况。
当我第一次运行该程序时,它运行良好。然后我在文件中添加了一些数据,所以它改变了它的大小。从那以后,当我用新文件再次运行程序时,结果总是旧文件的大小。
任何帮助表示赞赏!
int main(int argc,char* argv[]){
int out_file_size=0;
int fd_prognameout;
fd_prognameout=open(argv[1],O_RDWR | O_CREAT,00700);
if(fd_prognameout == -1){
perror("Error:");
return(0);
}
lseek(fd_prognameout,0,SEEK_SET);
out_file_size = lseek(fd_prognameout,0,SEEK_END);
lseek(fd_prognameout,0,SEEK_SET);
printf("The size of out file is: %d\n",out_file_size);
close(fd_prognameout);
return(0);
}
【问题讨论】:
-
请提供代码的minimal reproducible example。如果只是
lseek您有问题,那么您不需要在lseek调用之后显示大部分代码。提供查看问题所需的最少代码量以及调试信息,例如文件列表。 -
您是否有可能在不同目录中有两个同名文件,并且正在修改您的程序未打开的文件?
-
@RetiredNinja 感谢您的帮助。我再次运行程序,问题就消失了。我不知道怎么做。也许就像你说的那样。但事实是我没有更改我的代码,也没有更改文件名。如果您有任何想法,请告诉我。
-
@GrigoriosGaroufalis 那么你的代码很可能包含未定义的行为。
-
我使用 lseek 只是为了查找文件的大小 它可以工作,但它不是线程安全的,你可以使用 fstat()