c - fwrite 是否在内部调用任何锁?

标签 c file io fwrite

在 solaris 中,当我将 dbx 附加到其中一个正在运行的堆栈时,我发现对 fwrite 的调用导致 __lll_lock_wait()?

在什么情况下会发生这种情况? fwrite 是否在内部尝试获取锁?

最佳答案

我查看过的标准(C99 和 POSIX)并未提及与 fwrite 有关的锁定或解锁 IO。

在我的 linux 系统上,他们在 man 页面中不是很准确地提到了锁定:

   For non-locking counterparts, see unlocked_stdio(3).

实际上,有一个 fwrite_unlocked 函数。 POSIX 中的标准解锁函数只有 getc_unlocked()getchar_unlocked()putc_unlocked()putchar_unlocked().

我的解释是,可能 man(3) 集中的所有缓冲 IO 都已锁定,并且您只有很少的标准化接口(interface)来执行未锁定的 IO。

这些东西在线程之间锁定确实是一件好事,否则当多个线程写入 stderr 时,您可能会得到完全困惑的输出,例如

关于c - fwrite 是否在内部调用任何锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3685115/

相关文章:

c - 如何调用链接列表中的特定条目? C

c - 如何用C语言从文件中扫描二维数组?

c - 在 C 中将文件写入用户的 HOME 目录

java - 通过 Java NIO API 传输文件

java - 如何判断读取结束

c - 分离线程 : Handler not showing the Printfs

delphi - Delphi-搜索();程序。不兼容类型

java - 从 android 中的应用程序文件夹中读取文件

C,通过标记字符串填充二维数组

go - io.Pipe 中的竞争条件?