以奇怪的方式使用 fwrite
Using fwrite in strange way
如果我写
if((fp = fopen(some_path, "wb")))
{
int a = 50000;
fwrite("c",sizeof(char),a,fp);
fclose(fp);
fp = fopen(some_path, "rb");
char arr[50000];
fread(arr, sizeof(char), a, fp);
printf("%s\n", arr);
fclose(fp);
}
它当然会打印 "c" 但文件是 ~50kb
我的问题是:
- 这实际上是如何工作的?
- 如果我将 var a 修改为 60000,可执行文件就会崩溃,所以我在考虑 fwrite 的一些内部缓冲区。我如何获得它的最大容量?
- 为了使文件大小达到 ~50kb 并且仍然只打印,fwrite() 向文件写入了什么 "c"(我期待这里有一些曼波巨型字符)?
- 函数的这种用法有多么不对,我想非常快地写一个特定大小的空白文件(使用虚拟数据),为了不做大缓冲区和使用,我利用这种行为是不是错了增加内存以写入 "real" 数据但仍减少 fwrite 调用(我可能需要为 ex. 编写一个 10 GB 的文件)?
How is this actually working?
我认为它不起作用。你做了一些无稽之谈,但没有被发现。这给你的印象是它在未来会起作用。那是一个失败。
If I modify var a to 60000 the executable crashes, so i`m thinking about some internal buffer of fwrite. How do i get its max capacity?
没有缓冲区。您只是访问 "c"
创建的 c␀
之后内存中的任何内容。当它崩溃时,是因为你到达了无法读取的内存页(例如尚未分配)。
What does fwrite() write to the file in order to get the file to ~50kb of size
内存中由 "c"
及以后返回的地址中的任何内容。
and still print only "c"(I was expecting some mambo-jumbo characters here)?
它不只打印 c
。尝试 hexdump -C file
或 od -c file
How wrong is this usage of the function
难以置信。对于任何大于 2 的 a
值,它都可能崩溃。
I want to write a blank file of a certain size really fast(with dummy data)
truncate
的文档说:“如果文件以前较短,则对其进行扩展,扩展部分读取为空字节 ('\0')。" 所以你可以使用以下内容:
if (truncate(path, length)) {
perror("truncate");
exit(1);
}
如果我写
if((fp = fopen(some_path, "wb")))
{
int a = 50000;
fwrite("c",sizeof(char),a,fp);
fclose(fp);
fp = fopen(some_path, "rb");
char arr[50000];
fread(arr, sizeof(char), a, fp);
printf("%s\n", arr);
fclose(fp);
}
它当然会打印 "c" 但文件是 ~50kb
我的问题是:
- 这实际上是如何工作的?
- 如果我将 var a 修改为 60000,可执行文件就会崩溃,所以我在考虑 fwrite 的一些内部缓冲区。我如何获得它的最大容量?
- 为了使文件大小达到 ~50kb 并且仍然只打印,fwrite() 向文件写入了什么 "c"(我期待这里有一些曼波巨型字符)?
- 函数的这种用法有多么不对,我想非常快地写一个特定大小的空白文件(使用虚拟数据),为了不做大缓冲区和使用,我利用这种行为是不是错了增加内存以写入 "real" 数据但仍减少 fwrite 调用(我可能需要为 ex. 编写一个 10 GB 的文件)?
How is this actually working?
我认为它不起作用。你做了一些无稽之谈,但没有被发现。这给你的印象是它在未来会起作用。那是一个失败。
If I modify var a to 60000 the executable crashes, so i`m thinking about some internal buffer of fwrite. How do i get its max capacity?
没有缓冲区。您只是访问 "c"
创建的 c␀
之后内存中的任何内容。当它崩溃时,是因为你到达了无法读取的内存页(例如尚未分配)。
What does fwrite() write to the file in order to get the file to ~50kb of size
内存中由 "c"
及以后返回的地址中的任何内容。
and still print only "c"(I was expecting some mambo-jumbo characters here)?
它不只打印 c
。尝试 hexdump -C file
或 od -c file
How wrong is this usage of the function
难以置信。对于任何大于 2 的 a
值,它都可能崩溃。
I want to write a blank file of a certain size really fast(with dummy data)
truncate
的文档说:“如果文件以前较短,则对其进行扩展,扩展部分读取为空字节 ('\0')。" 所以你可以使用以下内容:
if (truncate(path, length)) {
perror("truncate");
exit(1);
}