1

私は別の自転車を作成したくなく、C ++のパイプ/ポペンの下で軽量(ブースト、ポコ、エース、または別のライブラリではない)クロスプラットフォーム(ウィン/リン)ラッパーを検索しました。助言がありますか?

4

1 に答える 1

3

多分何かのような

#ifndef _WIN32
inline int _pipe(int fildes[2], unsigned psize, int textmode) {
   return pipe(fildes);
}
inline FILE* _popen(const char* command, const char* type) {
   return popen(command, type);
}
inline void _pclose(FILE* file) { 
   pclose(file); 
}
#endif

MSDN によると、CRT には_popen_pclose、および_pipeが用意されています。したがって、下線付きの関数を Windows の外部にある実際の POSIX 関数に転送するだけです (逆にすることもできますが、_pipe は Windows で意味のある 2 つの追加の引数を取ることに注意してください)。

                      ___________
                     /           \ 
                    |  Warning !  |
                     \___________/
                           |
 -------- __@      __@     | __@       __@      __~@
 ----- _`\<,_    _`\<,_    _`\<,_     _`\<,_    _`\<,_
 ---- (*)/ (*)  (*)/ (*)  (*)/ (*)  (*)/ (*)  (*)/ (*)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1. これらの関数は、コンソール プログラムでのみ使用する必要があります。Windows GUI プログラムでは動作しません。詳細については、_popen の MSDN ページのメモを参照してください。また、Win32 API の Posix popen() と同等のものは何ですか?も参照してください。.

  2. popen はシェルでコマンドを実行することを知っていますか? UNIX シェルと Windows コマンド プロンプトの構文は大きく異なります。これらは pope/pclose のクロスプラットフォーム実装では対処できません。

  3. Windows 関数と、これらの単純なラッパーで処理されない実際の POSIX 関数との間には、微妙な違いがあるかもしれません。

  4. WinRT では使用できません。

(自転車はhttp://www.chris.com/ascii/index.php?art=transportation%2Fbicyclesからのコピーです。)

于 2012-09-13T09:13:00.973 に答える