私は読書の途中ですLinuxプログラミングインターフェイスおよび例によるLinuxのプログラミング両方とも非常に良い本であり、Linux APIについて非常によく説明しています。しかし、実際には、実際のプロジェクトでは、可能な限り、C++標準ライブラリ、Boostまたはその他の優れたC++ライブラリ(よく書かれた移植性の高いC++ライブラリがあります)をC APIよりも好むと思っています。なぜなら、良いC++コンパイラとライブラリ(Boost、TBBなど)がターゲットプラットフォームで利用可能な場合、Linux APIを直接使用する必要があるのはなぜですか?私はWindows APIについても同じことが言えると思いますが、Windowsシステムのプログラミングについてはあまりよく分かりません。C++はLinux APIの一部を非難しますか?
答えて
これはC++の新機能ではありません。 Cでは、長い、長い時間のためのファイルを開くには二つの方法があった:
// Only on POSIX
int fdes = open("file.txt", O_RDONLY);
または:だから、
// Any hosted C environment, POSIX or otherwise
FILE *fp = fopen("file.txt", "rb");
であれば、なぜ誰もがPOSIX固有のバージョンを使用するのでしょうか?答えは簡単です - POSIXファイル記述子で動作するシステムコールが多数あります。たとえば、select
。パイプやソケットのようなファイル以外のものを作ることもできますし、他のプロセスに渡すこともできます。 POSIXファイル記述子を使用する長い伝統があり、我々はそれらとネットワークプログラミングを行う方法に関する多数の書籍と参考文献を持っています。
したがって、ポータブルバージョンとパワフルバージョンの間のトレードオフです。それはいつもありました。
このの残りの半分は、Linux上のファイルで作業しているときにPOSIXインターフェイスで作業している時間です。ライブラリはそれをあなたから隠すだけです。 Boostはそれを使用し、Cランタイムはそれを使用し、JREはそれを使用し、GHCはそれを使用します。多くの(ほとんどの)言語ランタイムはC言語で書かれており、システムコールへの直接アクセスが優先されます。
できるだけ上位レベルのAPIを使用する必要があります。通常は作業が速く、コードを別のプラットフォームに移植する方が簡単です。しかし:あなたがより高いレベルのAPIを隠すことができなかったことを、様々な癖やパフォーマンスの問題を理解して、それはunderylingオペレーティングシステムのAPIを知っておくと便利だためlaw of leaky abstractionsへ
- 。
- ポータブルAPIでは対応できないものがあります。通常、オペレーティングシステム間ではそれほど違いがないためです。
- すべての移植可能なAPIにはオーバーヘッドが発生します。大きなプロジェクトでは、コードの他の部分と比べると小さいですが、何か小さなことをしている場合は、オーバーヘッドを避けたいかもしれません。特に、特定のAPIをどこかで使用する必要がある場合は特にそうです。
*漏れ抽象の法則を思い出させることに感謝します*。 – pic11
特定のプラットフォームではC++標準が公開されていません。プラットフォームに依存しないため、いくつかのプラットフォーム機能/機能を使用する場合は、通常はsystem
apiというプラットフォーム依存機能を使用する必要があります。その意味では、C++ライブラリはlinux/windows apiを非難しません。
- 1. 外部API呼び出しの難読化C++
- 2. C#の動的キーは静的なIOCパターンを非難しますか?
- 3. C/C++ Linux GDB API
- 4. getchは非難されました
- 5. Flash Player 11は一部のコンテンツを非表示にします
- 6. Linuxの部分ディレクトリ一覧
- 7. JSR 257(「非接触通信API」)C APIはありますか?
- 8. C++ seekgはファイルの一部を無視しますか?
- 9. C#のスマートカードAPI(Linuxフレンドリー)
- 10. Tortoise SVNの非難は非感覚で表示されます
- 11. strcpy_sはC++標準の一部ですか?またはMS Visual C++の一部のみ
- 12. C++ unixの端末画面の一部をクリアしますか?
- 13. プロトコル全体を非難する方法はありますか?
- 14. ヤフー天気APIは一部をサポートしていません
- 15. ANSI C Bluetooth APIとチュートリアルLinux
- 16. Linuxまたは非WindowsプラットフォームにMSMQをインストールしますか?
- 17. FacebookはJavaScript SDKを非難するのはいつですか?
- 18. 一部のUINavigationControllerのNavigationBarのみを非表示にしますか?
- 19. #pragma署名に基づいて関数を非難しますか? Visual Studioの
- 20. ソフトウェア開発の難しい部分は何ですか?
- 21. ウェブサービス。彼らは非難されていますか?
- 22. コンストラクタの通知は非難されました
- 23. 画像の一部を非表示
- 24. C#インストーラウィザードの一部としてMatlab MCRをインストールします
- 25. Google To To Speech APIは、一部の言語の反復データを返します。
- 26. Sharepoint - 一部のグループの一部のフィールドを非表示にする
- 27. これはメソッドの機能を非難する方法はありますか?
- 28. Linux用のObjective-Cアプリケーションのコンパイル(APIカバレッジ)
- 29. C - LinuxでのAPIライブラリの使い方
- 30. JCache API(JSR 107)はJava EEの一部ですか?
使いやすさと安全性と電力のトレードオフがあります。 Boostのライブラリは、しかし、espのパワー引数のビットを切り捨てます。 ASIOソケット・ライブラリを備えています。 –
@larsmans:残念ながら、ASIOは通常、Linuxでの仕事にとって間違ったツールです。 ASIOは、POSIXの傘下にある多くのAPIの1つにすぎません。 –
@Dietrich:Boost.AsioとPOSIX ASIOは大きく異なります。 IIRCブースト。AsioはPOSIX ASIO APIを使用していません。 –