栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

fopen()是Linux中的线程安全函数吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

fopen()是Linux中的线程安全函数吗?

如果两个线程都使用来打开同一文件

fopen()
,则它们各自将具有独立的文件流(
FILE*
),并由引用同一文件的独立文件描述符支持。您可以独立地写入两个文件流,但是文件的最终结果将取决于线程在何处写入以及何时刷新文件流。除非您控制每个线程的写入位置,否则结果是不可预测的。最简单的事情是确保两个线程使用相同的文件流,但是您可能仍需要在线程之间进行协调。请注意,POSIX需要使用C函数来提供对文件流的协调访问-
请参阅
flockfile()
其中的要求

引用

(FILE*)
对象的所有函数(名称以结尾的函数除外)
_unlocked
都应像它们在内部使用
flockfile()
funlockfile()
获得这些(FILE
*)对象的所有权一样。

如果在两个线程中都以追加模式打开文件,则每次写入都会在文件末尾安全地进行,但是您仍然需要担心在缓冲区填充之前刷新数据。

顺便说一句,如果您以追加模式(

O_APPEND
with
open()
,using
"a"
with
fopen()
)打开文件,则所有写操作都应在文件的末尾,并且您不会遇到交错写操作的麻烦—除非,也许您的独立线程正在使用文件流并且一次写入不止一个缓冲区已满,或者它们是
fflush()
在写入输出的每一行之后使用的,或者它们是在使用
write()
其众多亲戚中的一个或其每次写入一行的一部分。即使使用追加模式,也有可能遇到问题的方法,但是通常您必须尝试解决这些问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/373974.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号