недостаточно переменных, чтобы соответствовать сторожу - PullRequest
3 голосов
/ 29 сентября 2010

В соответствии с ссылкой exec , вызовы exec (или проверка стека функций vararg в целом) требуют (char*)NULL aka 0 в конце списка параметров. GCC, однако, жалуется на следующий код

char cmdFullPath[4096]; //yes this 4096 thing is bad coding practice 
...
execl(cmdFullPath, (char*)NULL);

//warning: not enough variable arguments to fit a sentinel

Кто-нибудь знает, что не так?

Ответы [ 3 ]

9 голосов
/ 29 сентября 2010

Эта ссылка говорит о том, что прототип

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

Я прочитал это как 2 параметра + (char *) NULL

что-то вроде:

execl(cmdFullPath, (const char*)NULL, (char*)NULL);

со страницы:

#include <unistd.h>

int main() {
    execl("/bin/ls", "ls", "-l", (char *)NULL);
    return 0;
}
2 голосов
/ 29 сентября 2010

Обычно передается имя исполняемого файла в качестве первого параметра

Так что, если исполняемый файл, который вы выполняете, является "/ bin / ls" (согласно опубликованной вами ссылке), то первый параметр - "ls""и вы бы передали (char *) NULL в качестве последнего (т.е. в данном случае 3-го) параметра.

0 голосов
/ 29 сентября 2010

Вы должны передать как минимум три аргумента.Второй - argv [0], поэтому он не может быть нулевым.

execl(cmdFullPath, "", NULL)
...