Я пишу программу на C в Linux.
Я создал процесс и раздвоил его, чтобы создать ребенка. Я хочу запустить другую программу для этого ребенка, поэтому я использую execlp
, Но эта программа должна работать в независимом окне.
if ( (execlp("xterm","xterm","-e","./Child1", "127.0.0.1", (char *) 0)) < 0) {
printf("Failed to Start the Echo Client. Exiting application.");
return 1;
}
Child1.c
это простая программа, которая находится в том же каталоге, что и мой текущий файл.
При выполнении код работает нормально с появлением окна xterm, но я получаю ошибку "xterm: Can't execvp: No file or directory"
Можете ли вы предложить мне решение?
Ваша система может не иметь xterm
установлен (или у пользователя неверный PATH
). Вы можете проверить существование /usr/bin/xterm
(например, access
syscall), или используйте что-то еще. Например, многие дистрибутивы Debian или Ubuntu имеют x-terminal-emulator
(обычно это символическая ссылка на какую-то конкретную программу), которую вы можете использовать вместо xterm
,
Если xterm
запускается ваша программа ./Child1
не существует, вы должны проверить его существование (с access
) до. Если у вас есть только исходный код ./Child1.c
Вы должны были скомпилировать его раньше (возможно, запустив system("gcc -Wall Child1.c -o Child1")
до и проверяя, что он успешно скомпилирован, т.е. system
возвращает 0 и что Child1
файл существует и является исполняемым).
Вы должны занять время, чтобы прочитать Xterm (1) справочная страница.
Других решений пока нет …