相当于 macOS 上的 fwrite_unlocked 吗?

问题描述 投票:0回答:2
我有一些在 Linux 和 Windows 上运行的代码,目前正在移植到 macOS。一个关键点是

fwrite_unlocked

(Linux),它在 Windows 上有一个等效的(_fwrite_nolock
),但据我所知,在 macOS 上没有。现在我只是使用
fwrite
,但我想知道是否有更好的解决方案?这只会导致性能下降吗?或者如果我使用 
fwrite
 的话,我是否会面临更严重的问题?

c linux multithreading macos fwrite
2个回答
2
投票
从该手册页来看,

fwrite_unlocked

 就像 
fwrite
 但不太安全。因此,使用 
fwrite
 不存在“更严重问题”的风险。 
fwrite
 的性能似乎确实会较差; 
_unlocked
 函数的全部目的是更快。

请从手册页中注意这一点:

[非标准 *_unlocked() 变体]可能不应该使用。


0
投票
macOS 和 iOS 文档中没有与

fwrite_unlocked()

 功能等效的函数。然而,有一个标准函数
putc_unlocked()
(IEEE Std 1003.1-2001,POSIX.1),并且基于它的简单实现是可能的。

static inline size_t fwrite_unlocked(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream) { char *cptr = ptr; size_t cnt = size*nitems; while(cnt && EOF != putc_unlocked(*cptr, stream)) { cptr++; cnt--; } return (cptr - (char*)ptr)/size; }
附注

Necroposting,但我在其他地方没有找到

fwrite_unlocked()

的简单实现。

© www.soinside.com 2019 - 2024. All rights reserved.