我想在Linux中编写套接字程序。所以它将使用glibc系统调用,如socket(),bind(),listen(),write()等。
我想知道,我可以编译它而不需要在FreeBSD,Solaris或Mac OS中进行任何更改吗?如果是,它被称为“posix标准”吗?
答案 0 :(得分:2)
Socket(),bind(),write()都是Posix函数,使用它们将使您的代码可以在各种POSIX投诉操作系统中移植。
Linux使用glibc,但是其他POSIX投诉操作系统将使用任何其他libc,不一定是glibc。但是所有上述函数(系统调用)都将使用相同的签名和功能实现,然后您可以编译然后在任何地方运行相同的代码。
答案 1 :(得分:1)
套接字调用源自BSD,但今天所有类Unix操作系统都支持它们。 Windows也有点支持它们的风格(称为Winsock)。
我不认为这些是Posix的一部分,但实际上你不应该有可移植性问题。
顺便说一下,当你做一个'man 2 socket'(或任何电话)时,它会在底部显示有用的历史和标准信息。
答案 2 :(得分:1)
您提到的所有系统都遵循Single UNIX Specification,并将POSIX:2001作为公分母(参见compliance部分),这就是您想要定位的内容。
GNU libc有许多不在POSIX中的函数。要查看是否可以使用特定功能,可以查看相关联机帮助页的“CONFORMING TO”部分,或参阅GNU libc手册。例如,我们可以在socket(2)中看到socket符合POSIX.1-2001,因此你可以使用它。
有关详情,请阅读1.2 Standards and Portability。
答案 3 :(得分:0)
您可以进行网络连接的最便携方式之一是使用Boost中的Asio库:
http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio.html
它既易于使用又可移植到Windows以及Unix / Posix系统(如Linux,Mac,各种BSD等)。