Кроссплатформенная легкая обертка для трубы / попен

Я не хочу создавать другой велосипед и искал облегченную (не Boost, Poco, Ace или другую библиотеку) кроссплатформенную (win / lin) оболочку под pipe / popen для C ++. Какие-либо предложения?

1

Решение

Может быть что-то вроде

#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 !  |
\___________/
|
-------- __@      __@     | __@       __@      __~@
----- _`\<,_    _`\<,_    _`\<,_     _`\<,_    _`\<,_
---- (*)/ (*)  (*)/ (*)  (*)/ (*)  (*)/ (*)  (*)/ (*)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1. Эти функции должны использоваться только в консольных программах. Это не будет работать в программе Windows GUI. См. Примечание на странице MSDN _popen для получения дополнительной информации, а также см. Что эквивалентно Posix popen () в Win32 API?.

  2. Вы знаете, что popen выполняет команду в оболочке, верно? Синтаксис между оболочкой UNIX и командной строкой Windows сильно отличается, и их невозможно решить с помощью некоторой кроссплатформенной реализации pope / pclose.

  3. Может быть небольшое различие между функциями Windows и реальными функциями POSIX, которые не обрабатываются с помощью этих простых оболочек.

  4. Вы не можете использовать их в WinRT.

(Велосипеды скопированы с http://www.chris.com/ascii/index.php?art=transportation%2Fbicycles.)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]