Кроссплатформенное IPC на C++, удобное для клиента?
Возможно ли каким-либо образом написать кроссплатформенное IPC (С++), с минимумом дополнительного кода, нужного для клиента? Скорость важна, но не сильно.
Выбор изначально упал на pipe'ы, но как выяснилось они работают только в одну сторону. Можно завести их в две стороны, но это, как выяснилось возможно только в *nix системах. В linux например можно написать свой popen использующий fork и exec, а в MacOS есть режим "r+" для popen.
В Windows это все не работает, есть ли вариант завести двухсторонние пайпы или использовать другой способ IPC?
Главное требование - сделать использование на клиенте как можно более удобным.
chz: И какой оверхед на клиенте? Публикации, тесты на эту тему есть? stdio у программы только один - вас устроит наличие у программы только одного клиента одновременно?
Для работы с stdin, stdout ничего не нужно, а тут - куча кода. У программы несколько клиентов одновременно. У клиентов только один сервер одновременно. Писать клиент должно быть также просто как написать простую программу чтения и передачи текста по stdin/stdout. В POSIX все легко. А в винде нет.
Армянское Радио: хочется, чтобы клиент можно было писать на любом языке. Плюс в любом случае CreateFile на клиенте это не кроссплатформенно, а следовательно придётся предоставлять библиотеку.
chz: в линуксе есть такая классная штука, как socat
она умеет с одного конца брать пайп и превращать его в stdio
под виндовс можете навелосипедить свое
Армянское Радио: похоже что пытаться на клиенте обойтись без библиотек - плохо. Можно все организовать по tcp, оверхед конечно еще тот, зато клиенты смогут находиться на других машинах (что не нужно, но в принципе круто). Опять же, если есть возможность, хотел бы получить еще пару рекомендаций по tox/любому другому удобному способу общения.