Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中使用fread读取文件_C_Operating System - Fatal编程技术网

在C中使用fread读取文件

在C中使用fread读取文件,c,operating-system,C,Operating System,我缺乏操作系统和C语言方面的正式知识。我的问题如下 当我试图在C语言中使用fread读取文件的第一个单字节时,包含该字节的整个磁盘块是被带到内存中还是仅仅是该字节 如果将整个块放入内存,读取时会发生什么 第二个字节,因为包含该字节的块已在 记忆 以磁盘块大小读取文件是否有意义 读取文件块保存在内存中的什么位置 这是我的答案 超过1个块,默认缓存为64ksetvbuffer可以改变这一点 在第二次读取时,没有I/O。数据从磁盘缓存中读取 不,文件通常比磁盘空间小。即使在实际磁盘空间大小范围内,读取

我缺乏操作系统和C语言方面的正式知识。我的问题如下

  • 当我试图在C语言中使用
    fread
    读取文件的第一个单字节时,包含该字节的整个磁盘块是被带到内存中还是仅仅是该字节
  • 如果将整个块放入内存,读取时会发生什么 第二个字节,因为包含该字节的块已在 记忆
  • 以磁盘块大小读取文件是否有意义
  • 读取文件块保存在内存中的什么位置
  • 这是我的答案

  • 超过1个块,默认缓存为64k
    setvbuffer
    可以改变这一点
  • 在第二次读取时,没有I/O。数据从磁盘缓存中读取
  • 不,文件通常比磁盘空间小。即使在实际磁盘空间大小范围内,读取超过文件大小的内容也会出错
  • 它是
    文件
    结构的一部分。这是特定于实现(编译器)的,所以不要碰它

  • 上面的缓存由C运行时库使用,而不是由操作系统使用。操作系统可能有磁盘缓存,也可能没有磁盘缓存,这是一种独立的机制。

    操作系统的缓存是一种不同的内存,而不是用户空间
    文件
    结构中使用的缓冲区。
    文件
    缓冲区是单独设置的,编译器环境只设置了默认值。正确,我在答案中添加了一个简短的解释。还修复了打字错误:(