memmove和bcopy有什么区别?

4
我了解memcpymemmove之间的区别:memmove处理srcdst的重叠。我查看了bcopy的手册页,似乎它也可以处理重叠部分。所以我想知道memmovebcopy之间是否有任何区别?

2
此函数已被弃用(在POSIX.1-2001中标记为LEGACY):在新程序中请使用memcpy(3)或memmove(3)。 - user1143634
1
我注意到 memovememcpy 是 C 标准库的一部分,但 bcopy 是 POSIX 特定的函数,因此在非 POSIX 平台(如 Windows)上不可用。 - Dai
2
你仍然会在一些老代码(特别是网络编程)中发现bcopy, bzero等函数。然而,这些函数已经过时,如今应该使用mem...()函数。 - David C. Rankin
3个回答

4

这两者通常的主要区别在于它们的起源。 bcopy 源自柏克莱软件发行版(BSD)系统,而 memcpy 以及相关函数主要来自AT&T的System V。最后,为了遵循传统代码,这些函数都被包含在标准中。

在Richard Steven的书"UNIX network programming"中有一个关于使用 memsetbzero 的良好解释,可以在一定程度上解释使用哪一个。

今天的实现只需调用相同的内部实现,但提供这两种接口。


4
bcopymemmove 做的事情完全相同。但是,它们接受参数的顺序不同:bcopy(src, dest, n)memmove(dest, src, n)。因此,它们不能成为同一个函数的两个名称。
从历史上看,bcopy 是这两个中较旧的一个;如果记忆没有出错,它在3BSD中存在。 而memmove则是由C委员会在1988年左右发明的。
新代码应该使用memmove,因为它是C标准所要求的,因此比bcopy更具可移植性。

2

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

bcopy已经被弃用。手册上写道:

该函数已被弃用(在POSIX.1-2001中标记为LEGACY):在新程序中使用memcpy(3)memmove(3)。请注意,memcpy(3)memmove(3)的前两个参数互换。POSIX.1-2008删除了对bcopy()的规范。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接