>>Именно для данной задачи лучше не перенаправлять стандартные выводы, а считывать через
>>popen функции: если есть вывод - открывать лог-файл, блокировать его эксклюзивной
>
>пробема в том что вы можете в своем проекте использовать кучу сторонних
>библиотек, и врядли каждый вызов в своей программе вы будете реализовывать
>через сторонний процесс.
>а в силу этого и нужно переопределение стдаута в основном процессе. Никак не могу осознать необходимость такой схемы. Если библиотека не удовлетворяет по параметрам - наверняка ей можно найти замену. Если нужно именно эту, или альтернатива еще хуже - можно набросать серверный вариант или схему с запуском отдельного процесса. Если же все библиотеки внезапно начнут черте-что выводить в стандартный вывод, то как раз для этого случая я и держу под рукой баночку с цианидом.
>конечно это просто пример. на самом деле разделяемая память это оптимальный вариант
>обмена, лучше не бывает! можно конечно еще через пайпы и сокеты,
>но это гораздо медленне.
тесты вам бы доказали, что не намного медленней. Выигрыш не будет заметен для буферов малой протяженности: 1-2% - это не то, ради чего стоит жертвовать стабильностью программ. Конечно, есть еще интересное решение virtual ring buffer (в тему уменьшения количества операций копирования в режиме пользователя), но это уже о разделяемой памяти для одного процесса.
>если использовать триды то эквивалентно по скорости. но в данном случае я
>предлагал реализовывать взаимодействие между процессами.
Да. Прошу все же заметить, что разделение памяти несколько отличается стабильностью в худшую сторону по сравнению с другими IPC методами. Обычно разделение на процессы делают тогда, когда хотят большей защищенности адресного пространства. pthread_mutex_* не смогут защитить, если один из процессов выйдет, забыв разлочить ранее заблокированный замок. В этом случае нет разницы: что используешь многопоточность, что разделяемую память - грабли, по конфигурации набитой шишки похожи, как близнецы.
>никакие индексы нигде при работе с разделяемой памятью не перестраиваются, мне кажеться
>вы это с чем то путаете.
Нет. Не путаю. Операции mmap/unmap могут сильно замедлить работу программы, если их использовать черезчур часто. Да на сегментацию процесса может сказаться не в лучшую сторону. Но не буду настаивать, возможно это особенности архитектуры только моей платформы.