【发布时间】:2012-09-13 08:45:34
【问题描述】:
我不想创建另一辆自行车并在 C++ 的 pipe/popen 下搜索轻量级(不是 boost、poco、ace 或其他库)跨平台(win/lin)包装器。有什么建议吗?
【问题讨论】:
标签: c++ cross-platform pipe wrapper popen
我不想创建另一辆自行车并在 C++ 的 pipe/popen 下搜索轻量级(不是 boost、poco、ace 或其他库)跨平台(win/lin)包装器。有什么建议吗?
【问题讨论】:
标签: c++ cross-platform pipe wrapper popen
可能是这样的
#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 ! |
\___________/
|
-------- __@ __@ | __@ __@ __~@
----- _`\<,_ _`\<,_ _`\<,_ _`\<,_ _`\<,_
---- (*)/ (*) (*)/ (*) (*)/ (*) (*)/ (*) (*)/ (*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这些函数只能在控制台程序中使用。它在 Windows GUI 程序中不起作用。有关详细信息,请参阅 _popen 的 MSDN 页面中的注释,另请参阅What is the equivalent to Posix popen() in the Win32 API?。
你知道 popen 在 shell 中执行命令吗? UNIX shell 和 Windows 命令提示符之间的语法有很大的不同,这些无法通过 pope/pclose 的一些跨平台实现来解决。
Windows 函数与未使用这些简单包装器处理的真正 POSIX 函数之间可能存在一些细微差别。
您不能在 WinRT 中使用它们。
(自行车是从http://www.chris.com/ascii/index.php?art=transportation%2Fbicycles复制的。)
【讨论】:
_pclose 从pclose 返回int 值,以便可以用它检查返回值?