_fwrite_nolock
),但据我所知,在 macOS 上没有。现在我只是使用fwrite
,但我想知道是否有更好的解决方案?这只会导致性能下降吗?或者如果我使用
fwrite
的话,我是否会面临更严重的问题?
fwrite_unlocked
就像
fwrite
但不太安全。因此,使用
fwrite
不存在“更严重问题”的风险。
fwrite
的性能似乎确实会较差;
_unlocked
函数的全部目的是更快。请从手册页中注意这一点:
[非标准 *_unlocked() 变体]可能不应该使用。
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()
的简单实现。