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苦情OSは必ずしもglibcではない他のlibcを使用します。ただし、上記のすべての関数(システムコール)は同じシグネチャと機能で実装され、コンパイルしてどこでも同じコードを実行できます。

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

于 2013-02-25T04:05:08.317 に答える
1

ソケット呼び出しはBSDで発生しましたが、今日ではすべてのUnixライクなOSがそれらをサポートしています。Windowsは、独自のフレーバー(Winsockと呼ばれる)でこれらをいくらかサポートしています。

これらはPosixの一部ではないと思いますが、実際には移植性の問題はないはずです。

ところで、「man 2ソケット」(または任意の呼び出し)を実行すると、下部に有用な履歴と標準情報が表示されます。

于 2013-02-25T02:17:48.333 に答える
1

あなたが言及するすべてのシステムはSingleUNIXSpecificationに準拠しており、共通の分母としてPOSIX:2001を使用しているため(コンプライアンスのセクションを参照)、それをターゲットにします。

ただし、GNU libcには、POSIXにはない多くの関数があります。特定の関数を使用できるかどうかを確認するには、関連するマンページの「準拠」セクションを参照するか、GNUlibcのマニュアルを参照してください。たとえば、socket(2)で、ソケットがPOSIX.1-2001に準拠していることがわかるので、それを使用できます。

これに関する詳細な背景については、1.2標準と移植性をお読みください。

于 2013-02-26T10:46:57.503 に答える
0

ネットワークを構築するための最もポータブルな方法の1つは、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 に答える