是否打开/读/写缓冲?

Mic*_*ine 1 c linux

我的程序中只使用了打开/读/写功能,但是oprofile告诉我:

20537     2.9883  tyn_indexer              tyn_indexer              nodes_term32_flush
11966     1.7411  vmlinux                  vmlinux                  jbd2_journal_commit_transaction
11733     1.7072  vmlinux                  vmlinux                  __strnlen_user
10741     1.5629  vmlinux                  vmlinux                  nobh_truncate_page
9728      1.4155  vmlinux                  vmlinux                  generic_file_buffered_write
9443      1.3740  vmlinux                  vmlinux                  mpage_da_map_and_submit
9023      1.3129  vmlinux                  vmlinux                  do_get_write_access
7283      1.0597  vmlinux                  vmlinux                  invalidate_interrupt31
5894      0.8576  vmlinux                  vmlinux                  write_cache_pages_da
5332      0.7758  vmlinux                  vmlinux                  journal_submit_commit_record
5316      0.7735  vmlinux                  vmlinux                  hugetlbfs_symlink
Run Code Online (Sandbox Code Playgroud)

generic_file_buffered_write如何出来,并且是开放/读/写函数缓冲?

R..*_*R.. 5

这取决于缓冲的意思.当C程序员说这些函数是无缓冲的时,它意味着应用程序进程本地没有缓冲区可能阻止其他进程以一致的方式查看数据.这些函数的实现(在内核中)可以自由地执行尽可能多的缓冲,只要它以对应用程序进程透明的方式完成(即不会干扰它们是否或何时看到数据上的数据)文件).

另一方面,stdio(通常)是缓冲的,这意味着如果使用stdio(FILE *函数from stdio.h)来访问文件,可以从底层文件描述符中读取数据,并在进程的内存空间中缓冲,其他进程无法看到它在您真正打算阅读和使用它之前,或者您编写的数据可能会保留在进程的内存空间中,其他进程在您编写之后很久就看不到它(除非您调用fflush).