Selon Référence Exec , appels à exécutés (ou option Vérification des fonctions Vararg En général) nécessite un (char *) null code> alias 0 à la fin de la liste des paramètres. GCC, cependant, se plaint du code suivant
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 Réponses :
Cette référence indique que le prototype est
#include <unistd.h> int main() { execl("/bin/ls", "ls", "-l", (char *)NULL); return 0; }
Tu as raison. Temporairement oublié que le 1er argument est obligatoire (nom exécutable). Doh!
Que se passe-t-il si la liste des arg1 = val1, arg2 = VAL2, arg3 = VAL3, etc ... ou arg1 VAL1 arg2 VAL2 arg3, etc ...?
Si je suis correct retour 0; code> n'est jamais exécuté. Est-ce une convention de l'écrire?
@Philx_x - voir ici CodeProject.com/questions / 693038 / Pourquoi-we-we-we-we-user-user n - il est nécessaire en C mais facultatif en C ++
@Preetsangha ceci résiste à une question différente. Mon inquiétude est que quelque chose après exécutant code> est inutile car à ce stade, le texte du programme du processus est littéralement écrasé par celui de
LS code>.
@PHILX_X - N'hésitez pas à modifier la question à améliorer!
Son habitude de transmettre le nom exécutable en tant que premier paramètre p>
Donc, si l'exécutable que vous exécutez est "/ bin / ls" (selon le lien que vous avez affiché), le premier paramètre est "LS" et vous passeriez ensuite (char *) null en dernier (c.-à-d. Dans ce cas, 3ème paramètre. P>
Vous devez passer au moins trois arguments. Le second est argv [0] de sorte qu'il ne peut pas être nul.
execl(cmdFullPath, "", NULL)
Duplicaté possible: Stackoverflow.com/questions/2050961/...