Альтернативы popen /pclose?
Вопрос
Я пишу программу, которая должна выполнять другие внешние процессы;прямо сейчас программа запускает командные строки процессов через popen, получает любой вывод, а затем получает статус выхода через pclose.
Однако происходит то, что для быстро выполняющихся процессов (например,запущенный процесс быстро завершается с ошибками) вызову pclose не удается получить статус завершения (pclose возвращает -1, errno равно ECHILD).
Есть ли у меня способ имитировать поведение типа popen / pclose, за исключением способа, который гарантирует захват "события" завершения процесса и результирующего кода возврата?Как мне избежать неотъемлемого состояния гонки с помощью pclose и завершения запущенного процесса?
Решение
разветвление/выполнение/ожидание
popen - это просто оболочка для упрощения вызовов fork / exec.Если вы хотите получить выходные данные дочернего элемента, вам нужно будет создать канал, вызвать fork , скопировать файловые дескрипторы дочернего элемента в канал, а затем выполнить.Родительский элемент может считывать выходные данные из канала и вызывать wait, чтобы получить статус выхода дочернего элемента.
Другие советы
Вы можете использовать vfork () и execv ().