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苦情OSは必ずしもglibcではない他のlibcを使用します。ただし、上記のすべての関数(システムコール)は同じシグネチャと機能で実装され、コンパイルしてどこでも同じコードを実行できます。
ソケット呼び出しはBSDで発生しましたが、今日ではすべてのUnixライクなOSがそれらをサポートしています。Windowsは、独自のフレーバー(Winsockと呼ばれる)でこれらをいくらかサポートしています。
これらはPosixの一部ではないと思いますが、実際には移植性の問題はないはずです。
ところで、「man 2ソケット」(または任意の呼び出し)を実行すると、下部に有用な履歴と標準情報が表示されます。
あなたが言及するすべてのシステムはSingleUNIXSpecificationに準拠しており、共通の分母としてPOSIX:2001を使用しているため(コンプライアンスのセクションを参照)、それをターゲットにします。
ただし、GNU libcには、POSIXにはない多くの関数があります。特定の関数を使用できるかどうかを確認するには、関連するマンページの「準拠」セクションを参照するか、GNUlibcのマニュアルを参照してください。たとえば、socket(2)で、ソケットがPOSIX.1-2001に準拠していることがわかるので、それを使用できます。
これに関する詳細な背景については、1.2標準と移植性をお読みください。
ネットワークを構築するための最もポータブルな方法の1つは、BoostのAsioライブラリを使用することです。
http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio.html
使いやすく、WindowsとUnix / Posixシステム(Linux、Mac、さまざまなBSDなど)の両方に移植できます。