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"?
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"?
Socket()、bind()、write() 都是 Posix 函数,使用它们将使您的代码可在各种 POSIX 兼容操作系统上移植。
Linux 使用 glibc,但其他 POSIX 投诉操作系统将使用任何其他 libc,不一定是 glibc。但是上述所有函数(系统调用)都将使用相同的签名和功能实现,您可以编译并在任何地方运行相同的代码。
您提到的所有系统都遵循Single UNIX Specification,并将 POSIX:2001 作为共同点(请参阅合规性部分),因此这就是您想要的目标。
然而,GNU libc 有许多 POSIX 中没有的功能。要查看是否可以使用特定功能,可以查看相关联机帮助页的“CONFORMING TO”部分,或参考 GNU libc 手册。例如我们可以在 socket(2) 中看到 socket 符合 POSIX.1-2001,所以你可以使用它。
有关这方面的更多背景信息,请阅读1.2 标准和可移植性。
套接字调用起源于 BSD,但如今所有类 Unix 操作系统都支持它们。Windows 也以自己的方式在一定程度上支持这些(称为 Winsock)。
我不认为这些是 Posix 的一部分,但实际上你不应该有可移植性问题。
顺便说一句,当您执行“man 2 socket”(或任何调用)时,它会在底部显示有用的历史记录和标准信息。
您可以进行网络的最便携的方法之一是使用 Boost 的 Asio 库:
http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio.html
它易于使用并可移植到 Windows 和 Unix/Posix 系统(如 Linux、Mac、各种 BSD 等)