我正在尝试使用fwrite()
编写块。在这一点上,我能写的最大的块是100000000(它可能比那个高一点......我没试过......)。我不能写一个大小为1000000000的块,outputfile是0 Byte。
是否有可能编写像例如1000000000甚至更多?
我正在使用uint64_t
存储这些数字。
提前谢谢!
评论中来自pastebin的代码:-zw
char * pEnd;
uint64_t uintBlockSize=strtoull(chBlockSize, &pEnd, 10);
uint64_t uintBlockCount=strtoull(chBlockCount, &pEnd, 10);
char * content=(char *) malloc(uintBlockSize*uintBlockCount);
/*
Create vfs.structure
*/
FILE *storeFile;
storeFile = fopen (chStoreFile, "w");
if (storeFile!=NULL)
{
uint64_t i=uintBlockCount;
size_t check;
/*
Fill storeFile with empty Blocks
*/
while (i!=0)
{
fwrite(content,uintBlockSize, 1, storeFile);
i--;
}
答案 0 :(得分:4)
您假设C库中用于表示对象大小和索引内存(size_t
)的类型可以包含与uint64_t
相同的值范围。情况可能并非如此!
fwrite
的{{3}}表示您可以使用该函数来编写大小受size_t
类型限制的块。如果您使用的是32位系统,则传递给fwrite
的块大小值将从uint64_t
转换为库的size_t
(uint32_t
),例如,在哪种情况下,一个非常大的值会丢失其最重要的数字。
答案 1 :(得分:0)
我在CentOS 5.3上使用gcc 4.1.2编译了一个块> 64MB的fwrite失败了 我不得不把它切成小块。 我也在相同的设置上对> 64MB块进行了fread()失败。
这似乎已在以后的Linux环境中得到修复,例如: Ubuntu 12.04。