Как щас:
формирую файло с переменными и запускаю sh-скрипт в popen на чтение
скрипту передаю в строке вызова это файлов в качестве парамтра
в самом скрипте инклудю это файло с переменными.
что-то делаю в скрипте и вывод отдаю вызывающей программе
что принал из popen вывожу на stdout и удаляю временный файл с параметрами.
Хотелось бы сделать как в execve - сформировать енвероменты и запустить этот скрипт (чтобы не инклудить и не создавать лишних файлов), но важен вывод данных от sh-скрипта!
Как я понял popen это функция, которая форкается и потом открывает sh в pipe?
Я двигаюсь в правильном направлении?
Может у кого есть нечто подобное?
В дочке: закрываешь дескриптор 0, дублируешь pipe1[0]; закрываешь
дескриптор 1, дублируешь pipe2[1]; запускаешь exec'ом sh -c "<путь к скрипту> параметры"
Теперь можешь скармливать скрипту стандартный ввод в pipe1[1] и читать ответы из pipe2[0]. Только дедлоков опасайся -- если stdio юзаешь, fflush() не забывай. И позакрывай в дочке и папе ненужные концы пайпов.
Если тебе нужен двусторонний обмен данных со скриптом
то воспользуйся советом Die-Hard (см. выше).
Если же тебе надо передать в скрипт только несколько значений
переменных а потом прочитать вывод скрипта то IMHO лучшим вариантом
будет popen(3). Есть как минимум два варианта:
/* установка переменных в командной строке - аккуратно! */
fp = popen("VAR1='value_for_var1' VAR2=12345 my_script.sh", "r");
или так:
/* изменение environment в родительском процессе */
putenv("VAR1=value_for_var1");
putenv("VAR2=12345");
fp = popen("my_script.sh", "r");