Comment passer des arguments de ligne de commande de programme C utilisant execlp
Je suis en train d'utiliser execlp dans un programme c pour exécuter un autre programme c. La fonction exec ne appeler le programme, mais il ne passe pas les arguments entiers correctement. Mon exec appel:
int exec_arg_1, exec_arg_2;
if(pid == 0){
printf("Repeat Number: %d, Process Number: %d\n", exec_arg_1, exec_arg_2);
execlp( "/home/drlight/Desktop/asp/Assignment_3/philosopher.o",
"philosopher.o", &exec_arg_1, &exec_arg_2, NULL );
printf("Exec didn't work...\n");
}
Je attribuer des valeurs à la exec_arg entiers, et de les imprimer à droite avant de s'assurer qu'ils sont corrects, mais le philosophe.o la fonction se contente de lire les 0 à partir de l'emplacement. Si je suis philosophe.o à partir de la ligne de commande, il lit les arguments normalement.
- Pourquoi ne pas simplement avoir un coup d'oeil à la page de man pour
execlp
pour voir quels types d'arguments qu'il faut? Vous appelez à un comportement indéterminé. - Il suffit de comprendre que Unix/Linux, les développeurs ne peuvent manipuler du texte. Donné une représentation binaire d'un entier, leur cerveau exploser.
- J'ai essayé en passant des tableaux de char, mais le même problème se produit. Aussi, je pensais que les entiers et les chars étaient interchangeables dans la plupart des situations en C. je n'ai pas tout les avertissements du compilateur.
- Non, les entiers et les caractères ne sont en général pas interchangeables. Vous avez besoin de convertir l'entier args dans les cordes et de transmettre ces chaînes en
execlp
.snprintf
peut vous aider à convertir les entiers dans les chaînes et d'écrire dans une mémoire tampon.
Vous devez vous connecter pour publier un commentaire.
Arguments de programmes sont toujours des chaînes de caractères.
Noter que
execlp()
est vraiment utile avec un nombre fixe d'arguments (ou, au moins, quand il y a un petit fixe la limite supérieure sur le nombre d'arguments). Le plus souvent,execvp()
est un meilleur choix.Cette page comprend beaucoup d'exemples d'utilisation....
EDIT : Ajout de l'extrait de code dans le lien
Un extrait de code dans le lien ci-dessus
La meilleure pratique serait d'avoir un coup d'oeil à le execlp(3) l'homme page en premier lieu je pense.
EDIT : Ajout de l'explication de execlp(3) fro ml page de man
FreeBSD homme page explique l'utilisation de execlp() comme suit
PS : certains renseignements, tels que le chemin de recherche par défaut, tapis de varier en fonction de votre système
Votre problème, c'est que excelp prend chaîne de pointeurs non entiers pour ses arg paramètres. À partir de la page de manuel
Vous devrez le convertir en chaînes avant de les transmettre à execlp.
Vous devez vous assurer que MAXDIGITS est assez grand pour contenir tous les chiffres de votre numéro, mais 25 devrait être suffisant pour la même longs sur la plupart des plates-formes en cours. Cependant, gardez à l'esprit que dans les futures versions de gcc et/ou avec différents compilateurs cela peut être différent. N'oubliez pas de laisser de la place pour le négatif soit. Vous pouvez vérifier ces valeurs maximales de l'importation de limites.h et l'impression les valeurs de INT_MAX et LONG_MAX.