Я не хочу использовать system () в моей C-программе, потому что system (3) блокирует, а это не то, что я хочу.Каков оптимальный способ сделать это?
Я думаю, что быстрое и грязное действие - вызвать sytem (команду &).& будет порождать новый процесс.
Используйте fork(), чтобы создать новый процесс, а затем используйте system() (или любую функцию exec) в нем. Исходный процесс сможет продолжить выполнение.
fork()
system()
exec
Ответ зависит от вашей реальной цели.Вы не говорите, на какой платформе вы работаете, и я очень мало знаю о Windows, поэтому это касается только ваших опций в linux / unix.
Вы просто хотите создать другую программуи не нужно взаимодействовать с ним.В этом случае вызовите fork(), а затем в дочернем процессе выполните execve() (или связанную функцию).
execve()
Youхочу взаимодействовать с другой программой.В этом случае используйте popen().
popen()
Вы хотите, чтобы часть вашей программы выполнялась как подпроцесс.В этом случае используйте fork() и вызывайте любые функции, которые вам нужны для запуска в дочернем процессе.
Вам необходимо взаимодействовать с частью вашей программы, выполняющейся в качестве подпроцесса.Позвоните pipe(), чтобы у вас был дескриптор файла для связи, затем наберите fork() и используйте пару дескрипторов файлов для связи.Кроме того, вы можете общаться через сокет, очередь сообщений, общую память и т. Д.
pipe()
Возможно, вы захотите использовать popen. Он создает новые процессы и позволяет перенаправить вывод процесса на собственный процесс.
popen
Если в Windows, используйте функцию ShellExecute() из Windows API.
ShellExecute()
Если в Unix, выберите fork(), затем system(), как указано.