我不想创建另一个自行车并在管道/ popen下为C ++搜索轻量级(不是boost,poco,ace或其他库)crossplatform(win / lin)包装器。有什么建议吗?
答案 0 :(得分: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页面中的注释,另请参阅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复制的。)