我用fopen打开了一个非常大的文件流。 在对该流执行任何读取操作之前,我使用unlink()删除了该文件。 而且,我仍然可以阅读整个文件。文件被删除后,fread可能吗?
我猜测有一个与流相关的缓冲区,它保存着文件的数据。但显然缓冲区会有一个限制。这就是我选择大小为551126688字节或526MB的a_big_file的原因。
我想知道背后的确切原因是什么。 这是我使用的测试代码。
#include <stdio.h>
#include <unistd.h>
int main(){
FILE *fp;
long long int file_size = 0;
int bytes_read = 0;
char buf[1];
fp = fopen("a_big_file", "r");
unlink("a_big_file");
while(0 != (bytes_read = fread(buf, 1, 1, fp))){
file_size += bytes_read;
}
printf("file_size is %llu\n", file_size);
return 0;
}
输出: FILE_SIZE是551126688
哎呀......我的眼睛越来越不好。我认为这说“FRED可能......” – StingyJack 2009-02-03 13:51:22
FRED是Macintosh Common Lisp的编辑,Digitool从未管理过迁移到OSX。令人遗憾的是,我不知道在现代Macintosh上它仍然是可能的,尽管许多MCL仍然存在。 – 2009-02-03 15:06:12