Я не хочу создавать другой велосипед и искал облегченную (не Boost, Poco, Ace или другую библиотеку) кроссплатформенную (win / lin) оболочку под pipe / popen для C ++. Какие-либо предложения?
Может быть что-то вроде
#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 говорит _popen, _pclose а также _pipe предоставляются в ЭЛТ. Поэтому мы просто перенаправляем подчеркнутые функции на реальные функции POSIX вне Windows (вы можете сделать обратное, но обратите внимание, что _pipe принимает 2 дополнительных аргумента, которые имеют смысл в Windows).
___________
/ \
| Warning ! |
\___________/
|
-------- __@ __@ | __@ __@ __~@
----- _`\<,_ _`\<,_ _`\<,_ _`\<,_ _`\<,_
---- (*)/ (*) (*)/ (*) (*)/ (*) (*)/ (*) (*)/ (*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Эти функции должны использоваться только в консольных программах. Это не будет работать в программе Windows GUI. См. Примечание на странице MSDN _popen для получения дополнительной информации, а также см. Что эквивалентно Posix popen () в Win32 API?.
Вы знаете, что popen выполняет команду в оболочке, верно? Синтаксис между оболочкой UNIX и командной строкой Windows сильно отличается, и их невозможно решить с помощью некоторой кроссплатформенной реализации pope / pclose.
Может быть небольшое различие между функциями Windows и реальными функциями POSIX, которые не обрабатываются с помощью этих простых оболочек.
Вы не можете использовать их в WinRT.
(Велосипеды скопированы с http://www.chris.com/ascii/index.php?art=transportation%2Fbicycles.)
Других решений пока нет …