Как мне обернуть execl в c - PullRequest
       16

Как мне обернуть execl в c

1 голос
/ 21 сентября 2011

Я пробовал два способа:

void func(const char *path, const char *arg0, ...){
        va_list args;
        va_start(args, arg0);
        execl(path, arg0, args, NULL);
        va_end(args);
}
func("/bin/ls", "ls");

И

void func(const char *path, const char *arg0, ...){
        va_list args;
        va_start(args, arg0);
        execl(path, arg0, args);
        va_end(args);
}

func("/bin/ls", "ls", NULL);

Но, кажется, после нескольких тестов не работает, как ожидалось ...

Что не так в моем способе оборачивания параметров переменной длины?

Ответы [ 2 ]

4 голосов
/ 21 сентября 2011

Поскольку вы не знаете, сколько аргументов вы получите, вам нужно / вы хотите использовать execv вместо execl.Вам нужно будет просмотреть аргументы, получить указатель на начало каждой строки и поместить их в массив.Затем вы передадите адрес этого массива в execv.

0 голосов
/ 21 сентября 2011

execl() - это переменная функция, поэтому она должна скомпилироваться.

Однако она не будет работать.execl ожидает, что каждый из его аргументов будет const char *, то есть указатель на строку.A va_list не такая вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...