我希望创建一个 *BSD 兼容的 C 函数,如下所示:
int
fs_ext__swap (const char *from, const char *to) {
int res = renameatx_np(AT_FDCWD, from, AT_FDCWD, to, RENAME_SWAP);
return res == -1 ? uv_translate_sys_error(errno) : res;
}
目前我收到构建错误 ( 'renameatx_np' is invalid in C99 [-Wimplicit-function-declaration]
),因为据我所知,该renameatx_np
功能是 MacOS 独有的。*BSD 是否有等效版本(我使用的是 OpenBSD 7.3 atm)?
RENAME_SWAP
如果我删除标志并将函数更改为renameat
(编辑:我试过这个,它构建和编译正常但在上游测试期间导致 ENOENT 错误),我会冒什么风险?
我的计划是使用linkat和unlinkat函数来模拟renameatx_np的功能。
我还能如何处理这个问题?
据我所知,对标题问题的简短回答是否定的。
但是,有足够的本机函数可用于实现 fs_ext__swap 函数。这是我的做法: