Gab*_*iel 21 c filesystems fwrite fat32
我有一个简短的C程序写入文件,直到磁盘上没有更多的空间:
#include <stdio.h>
int main(void) {
char c[] = "abcdefghij";
size_t rez;
FILE *f = fopen("filldisk.dat", "wb");
while (1) {
rez = fwrite(c, 1, sizeof(c), f);
if (!rez) break;
}
fclose(f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序(在Linux中)时,它会在文件达到2GB时停止.
由于FILE结构,是否存在内部限制?
谢谢.
Dav*_*eau 28
在32位系统(即OS是32位)上,默认情况下,fopen和co限制为32位大小/偏移/等等...您需要启用大文件支持,或使用*64位选项:
http://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html#index-fopen64-931
然后你的fs需要支持这个,但除了fat和其他原始fs之外,所有这些都支持创建> 2 gb的文件.
mct*_*ylr 12
当文件达到2GB时停止.
由于FILE结构,是否存在内部限制?
这是由于libc(标准C库),默认情况下在x86(IA-32)Linux系统上是由glibc(GNU的C库)提供的32位函数.因此,默认情况下,文件流大小基于32位 - 2 ^(32-1).
有关使用大文件支持的信息,请参阅网页.
#define _FILE_OFFSET_BITS 64
/* or more commonly add -D_FILE_OFFSET_BITS=64 to CFLAGS */
#include <stdio.h>
int main(void) {
char c[] = "abcdefghij";
size_t rez;
FILE *f = fopen("filldisk.dat", "wb");
while (1) {
rez = fwrite(c, 1, sizeof(c), f);
if ( rez < sizeof(c) ) { break; }
}
fclose(f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意:大多数系统期望fopen(和off_t)基于2 ^ 31文件大小限制.将它们替换off64_t并fopen64使其明确,并根据使用情况可能是最好的方法.但一般不推荐,因为它们是非标准的.
| 归档时间: |
|
| 查看次数: |
26464 次 |
| 最近记录: |