1

我不想创建另一辆自行车并在 C++ 的 pipe/popen 下搜索轻量级(不是 boost、poco、ace 或其他库)跨平台(win/lin)包装器。有什么建议么?

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 需要 2 个额外的参数,这在 Windows 中是有意义的)。

                      ___________
                     /           \ 
                    |  Warning !  |
                     \___________/
                           |
 -------- __@      __@     | __@       __@      __~@
 ----- _`\<,_    _`\<,_    _`\<,_     _`\<,_    _`\<,_
 ---- (*)/ (*)  (*)/ (*)  (*)/ (*)  (*)/ (*)  (*)/ (*)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1. 这些函数只能在控制台程序中使用。它在 Windows GUI 程序中不起作用。有关详细信息,请参阅 _popen 的 MSDN 页面中的注释,另请参阅Win32 API 中的 Posix popen() 等价物是什么?.

  2. 你知道 popen 在 shell 中执行命令吗?UNIX shell 和 Windows 命令提示符之间的语法有很大的不同,这些不能通过 pope/pclose 的一些跨平台实现来解决。

  3. Windows 函数和没有使用这些简单包装器处理的真正 POSIX 函数之间可能存在一些细微差别。

  4. 您不能在 WinRT 中使用它们。

(自行车是从http://www.chris.com/ascii/index.php?art=transportation%2Fbicycles复制而来的。)

于 2012-09-13T09:13:00.973 回答