缓冲io和未缓冲io之间的区别

阮浩

我对C语言的I / O编程中的缓冲区有疑问。
例如,总是说fwrite是缓冲的I / O,而write是无缓冲的I / O。我的理解是,这里的“缓冲”在应用程序层中,我认为在内核级别,它们都具有缓冲。从APUE,我看到了:

UNIX系统的传统实现在内核中具有缓冲区高速缓存或页面高速缓存,大多数磁盘I / O都通过该缓冲区高速缓存或页面高速缓存。当我们将数据写入文件时,内核通常会将数据复制到其缓冲区之一中,并排队等待稍后写入磁盘。这称为延迟写入。

我对吗?所以我做了一个实验:

 int main() {
    char *fname = "helloworld";
    char content[] = "abcdefg";
    int fd = open(fname, O_WRONLY | O_CREAT);
    int flag = fcntl(fd, F_GETFL);
    flag &= ~O_SYNC;
    fcntl(fd, F_SETFL, flag);
    write(fd, content, 3);
    sleep(100);
    return 0;
   }

我以为在睡眠期间什么也不会输出,但事实恰恰相反。
我有误会吗?

威廉·珀塞尔

有多层缓冲。如果调用write,则不会发生应用程序层缓冲。如果您从另一个进程查看文件,则会看到数据,但这并不意味着它们已提交到磁盘,因为内核中发生了一层缓冲。由于内核正在处理来自另一个进程的访问,因此它将内核中的数据报告给另一个进程。换句话说,从所有用户空间应用程序的角度来看,数据已被写入文件,但实际上并没有到达磁盘。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

微软的Bond和Google的协议缓冲区之间的区别

来自分类Dev

内存,缓冲区和堆栈之间有什么区别?

来自分类Dev

VM_IO和VM_RESERVED之间的区别

来自分类Dev

Directx 11 with C ++:使用常量缓冲区和SetRawValue()之间的区别?

来自分类Dev

如何在C中复用缓冲的IO?

来自分类Dev

'_io'和'io'有什么区别?

来自分类Dev

传输缓冲区和接收缓冲区(txb和rxb)的用法和区别

来自分类Dev

缓冲代码和非缓冲代码有什么区别?

来自分类Dev

单缓冲(GLUT_SINGLE)与双缓冲工程图(GLUT_DOUBLE)之间的区别

来自分类Dev

MEAN.io和Sails.js之间的区别

来自分类Dev

显示缓冲异步通道和通道之间的区别的示例?

来自分类Dev

Java.io从未缓冲的字节一获取缓冲字符流的两种方法

来自分类Dev

Java是否会自动缓冲文件IO?

来自分类Dev

解码图片缓冲区和编码图片缓冲区之间有区别吗?

来自分类Dev

Dev依赖和Cypress.io中的依赖之间的区别

来自分类Dev

Kotlin箭头IO,IO.fx,IO效果之间的区别

来自分类Dev

queue.wait()和等待缓冲区销毁之间有什么区别

来自分类Dev

未缓冲和完全缓冲的内存有什么区别?

来自分类Dev

Haskell默认io缓冲

来自分类Dev

VM_IO和VM_RESERVED之间的区别

来自分类Dev

Lua中的io隐式和显式io名称空间函数之间的区别

来自分类Dev

环形缓冲区和队列之间的区别

来自分类Dev

传输缓冲区和接收缓冲区之间的用法和区别(txb和rxb)

来自分类Dev

MEAN.io和Sails.js之间的区别

来自分类Dev

内存缓冲区寄存器和程序计数器之间的区别

来自分类Dev

使用无缓冲的IO例程询问和读取用户输入

来自分类Dev

缓冲区和缓存之间有什么区别?

来自分类Dev

Java.io从未缓冲的字节一获取缓冲字符流的两种方法

来自分类Dev

socket.io 房间之间的区别 to 和 in

Related 相关文章

  1. 1

    微软的Bond和Google的协议缓冲区之间的区别

  2. 2

    内存,缓冲区和堆栈之间有什么区别?

  3. 3

    VM_IO和VM_RESERVED之间的区别

  4. 4

    Directx 11 with C ++:使用常量缓冲区和SetRawValue()之间的区别?

  5. 5

    如何在C中复用缓冲的IO?

  6. 6

    '_io'和'io'有什么区别?

  7. 7

    传输缓冲区和接收缓冲区(txb和rxb)的用法和区别

  8. 8

    缓冲代码和非缓冲代码有什么区别?

  9. 9

    单缓冲(GLUT_SINGLE)与双缓冲工程图(GLUT_DOUBLE)之间的区别

  10. 10

    MEAN.io和Sails.js之间的区别

  11. 11

    显示缓冲异步通道和通道之间的区别的示例?

  12. 12

    Java.io从未缓冲的字节一获取缓冲字符流的两种方法

  13. 13

    Java是否会自动缓冲文件IO?

  14. 14

    解码图片缓冲区和编码图片缓冲区之间有区别吗?

  15. 15

    Dev依赖和Cypress.io中的依赖之间的区别

  16. 16

    Kotlin箭头IO,IO.fx,IO效果之间的区别

  17. 17

    queue.wait()和等待缓冲区销毁之间有什么区别

  18. 18

    未缓冲和完全缓冲的内存有什么区别?

  19. 19

    Haskell默认io缓冲

  20. 20

    VM_IO和VM_RESERVED之间的区别

  21. 21

    Lua中的io隐式和显式io名称空间函数之间的区别

  22. 22

    环形缓冲区和队列之间的区别

  23. 23

    传输缓冲区和接收缓冲区之间的用法和区别(txb和rxb)

  24. 24

    MEAN.io和Sails.js之间的区别

  25. 25

    内存缓冲区寄存器和程序计数器之间的区别

  26. 26

    使用无缓冲的IO例程询问和读取用户输入

  27. 27

    缓冲区和缓存之间有什么区别?

  28. 28

    Java.io从未缓冲的字节一获取缓冲字符流的两种方法

  29. 29

    socket.io 房间之间的区别 to 和 in

热门标签

归档