memmove 和 bcopy 有什么区别?

What's the difference between memmove and bcopy?

我理解 memcpymemmove 之间的区别:memmove 处理 srcdst 的重叠。我检查了 man page for bcopy ,它似乎也处理重叠。所以我想知道 memmovebcopy 之间是否有任何区别?

它们在功能上是等价的。区别在于便携性。 memmove 是 C 标准的一部分,而 bcopy 是 POSIX 的一部分,因此可移植性较差。

bcopy 已弃用。手册页说:

This function is deprecated (marked as LEGACY in POSIX.1-2001): use memcpy(3) or memmove(3) in new programs. Note that the first two arguments are interchanged for memcpy(3) and memmove(3). POSIX.1-2008 removes the specification of bcopy().

bcopymemmove 做同样的事情。然而,他们以不同的顺序接受参数:bcopy(src, dest, n) vs memmove(dest, src, n)。所以他们不能是同一个函数的两个名字。

从历史上看,bcopy 是两者中较旧的一个;如果没记错的话,它出现在 3BSD 中。 memmove是C委员会在1988年左右发明的

新代码应使用 memmove,因为它是 C 标准所要求的,因此比 bcopy 更便携。

主要区别通常来自它们的来源。 bcopy 来自 Berkeley Source Distribution (BSD) 系统,而 memcpy 及其家族主要来自 AT&T 的 System V。最后,通过遵守遗留代码,所有这些功能都包含在标准中。

Richard Steven 的书 "UNIX network programming" 中对 memsetbzero 的用法有很好的解释,其中对其中任何一个的用法都有一定的解释。

今天的实现只是解决调用相同的内部实现但提供两个接口。