Что делает execl ("/bin/emacs", "/etc/fstab"); делать?

Например :

int pid1 = fork();
printf("%s\n", "[1]");
int pid2 = fork();
printf("%s\n", "[2]");
if ((pid1 == 0) && (pid2 == 0)) {
    printf("%s\n", "[3]");
    execl("/bin/emacs", "/etc/fstab");
    int pid3 = fork();
    printf("%s\n", "[4]");
} else {
    printf("%s\n", "[5]");
}

Что на самом деле делает линия?

execl Семейство функций заменяет текущий образ процесса новым образом процесса.

Итак, эта программа запускается, просто давайте запустим программу:

Он разделит процессы на 2 с первым ответвлением:

[1]
[1]

После этого он снова разветвляется, поэтому у вас есть 4 процесса и отпечаток:

[2]
[2]
[2]
[2]

Дочерний процесс имеет pid == 0, Есть один дочерний процесс с pid1 и один с pid2 так будет точно

[3] 

И вот идет execl, Что именно он делает в этот момент?

1 ответ

Вопрос привлек внимание к разветвлению новых процессов, кроме того, он имел намерение уточнить, как execl Работа. Итак, он объявлен как:

int execl(const char *path, const char *arg, ...);

где - неопределенное имя пути для утилиты sh, file - файл образа процесса, а для execvp(), где arg0, arg1 и т. д. соответствуют значениям, переданным execvp () в argv [0], argv 1 и скоро.

Аргументы, представленные arg0,... являются указателями на символьные строки с нулевым символом в конце. Эти строки должны составлять список аргументов, доступных для нового образа процесса. Список заканчивается нулевым указателем. Аргумент arg0 должен указывать на строку имени файла, связанную с процессом, запускаемым одной из функций exec.

(взято из execl документация)

Итак, это означает, что вы упускаете некоторые аргументы. В этом случае вы должны использовать его так:

execl("/bin/emacs", "/bin/emacs", "/etc/fstab", (char*)NULL);

Этот звонок должен начаться emacs редактор с аргументом /etc/fstab - что значит emacs будет открыт редактор (если установлен) с содержанием fstab файл находится в /etc/,

Другие вопросы по тегам