Вы, кажется, ответили на свой вопрос.Если ваш код должен работать в более старой системе, которая не поддерживает popen
открытие двунаправленных каналов, то вы не сможете использовать popen
(по крайней мере, тот, который поставляется).
Реальный вопрос будет о точных возможностях старых систем, о которых идет речь.В частности, поддерживает ли их pipe
создание двунаправленных каналов?Если у них есть pipe
, который может создать двунаправленный канал, но popen
, который не создает, тогда я напишу основной поток кода для использования popen
с двунаправленным каналом и предоставлю реализацию popen
, который может использовать двунаправленный канал, который компилируется в используемом, где это необходимо.
Если вам нужно поддерживать системы настолько старые, что pipe
поддерживает только однонаправленные каналы, то вы в значительной степени застряли с использованием pipe
, fork
, dup2
и т. Д. Самостоятельно.Вероятно, я бы все-таки обернул это в функцию, которая работает почти , как современная версия popen
, но вместо возврата одного дескриптора файла заполняет небольшую структуру двумя дескрипторами файла, один длядетский stdin
, другой для ребенка stdout
.