我不想创建另一辆自行车并在 C++ 的 pipe/popen 下搜索轻量级(不是 boost、poco、ace 或其他库)跨平台(win/lin)包装器。有什么建议么?
问问题
2142 次
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 ! |
\___________/
|
-------- __@ __@ | __@ __@ __~@
----- _`\<,_ _`\<,_ _`\<,_ _`\<,_ _`\<,_
---- (*)/ (*) (*)/ (*) (*)/ (*) (*)/ (*) (*)/ (*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这些函数只能在控制台程序中使用。它在 Windows GUI 程序中不起作用。有关详细信息,请参阅 _popen 的 MSDN 页面中的注释,另请参阅Win32 API 中的 Posix popen() 等价物是什么?.
你知道 popen 在 shell 中执行命令吗?UNIX shell 和 Windows 命令提示符之间的语法有很大的不同,这些不能通过 pope/pclose 的一些跨平台实现来解决。
Windows 函数和没有使用这些简单包装器处理的真正 POSIX 函数之间可能存在一些细微差别。
您不能在 WinRT 中使用它们。
(自行车是从http://www.chris.com/ascii/index.php?art=transportation%2Fbicycles复制而来的。)
于 2012-09-13T09:13:00.973 回答