0

I want to write a socket program in Linux. So it'll use glibc system calls like socket(), bind(), listen(), write() etc.

I wonder, can i compile it without any changing in FreeBSD, Solaris or Mac OS? If yes, is it called "posix standards"?

4

4 回答 4

2

Socket()、bind()、write() 都是 Posix 函数,使用它们将使您的代码可在各种 POSIX 兼容操作系统上移植。

Linux 使用 glibc,但其他 POSIX 投诉操作系统将使用任何其他 libc,不一定是 glibc。但是上述所有函数(系统调用)都将使用相同的签名和功能实现,您可以编译并在任何地方运行相同的代码。

http://en.wikipedia.org/wiki/Berkeley_sockets#BSD_vs_POSIX

于 2013-02-25T04:05:08.317 回答
1

您提到的所有系统都遵循Single UNIX Specification,并将 POSIX:2001 作为共同点(请参阅合规性部分),因此这就是您想要的目标。

然而,GNU libc 有许多 POSIX 中没有的功能。要查看是否可以使用特定功能,可以查看相关联机帮助页的“CONFORMING TO”部分,或参考 GNU libc 手册。例如我们可以在 socket(2) 中看到 socket 符合 POSIX.1-2001,所以你可以使用它。

有关这方面的更多背景信息,请阅读1.2 标准和可移植性

于 2013-02-26T10:46:57.503 回答
1

套接字调用起源于 BSD,但如今所有类 Unix 操作系统都支持它们。Windows 也以自己的方式在一定程度上支持这些(称为 Winsock)。

我不认为这些是 Posix 的一部分,但实际上你不应该有可移植性问题。

顺便说一句,当您执行“man 2 socket”(或任何调用)时,它会在底部显示有用的历史记录和标准信息。

于 2013-02-25T02:17:48.333 回答
0

您可以进行网络的最便携的方法之一是使用 Boost 的 Asio 库:

http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio.html

它易于使用并可移植到 Windows 和 Unix/Posix 系统(如 Linux、Mac、各种 BSD 等)

于 2013-02-25T02:25:25.667 回答