Что делает execl ("/ bin / emacs", "/ etc / fstab");делать? - PullRequest
0 голосов
/ 27 января 2019

например:

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]

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

[3] 

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

1 Ответ

0 голосов
/ 27 января 2019

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

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

где - неопределенный путь к файлу для утилиты sh, файл - файл образа процесса, а для 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/.

...