L’appel system () renvoie une valeur incorrecte en C

Je reçois une valeur de retour -1, même après avoir exécuté une commande avec succès via un appel system (). Veuillez consulter le code C suivant pour plus d’informations.

system("ping -w 3 -c 1 -q -I 63.254.203.24 63.254.203.26 >/dev/null"); 

et puis je vérifie la valeur de retour de cet appel system (), bien qu’il soit pingable mais j’ai trouvé -1 comme valeur de retour.

Pour voir la valeur de retour actuelle, utilisez WEXITSTATUS(n) . La raison pour laquelle le system ne renvoie pas la valeur réelle est parce que (et cela n’est valable que pour Linux) il est implémenté à l’aide de fork , exec et wait le processus qui contient si le processus s’est terminé normalement ou à cause d’un signal plus la valeur de retour réelle. Pour accéder à ces différentes valeurs, vous devez utiliser des macros telles que WEXITSTATUS(n) ces macros sont mentionnées dans man 3 wait

La section VALEUR RENVOYÉE du man system :

La valeur renvoyée est -1 en cas d’erreur (par exemple, fork (2) a échoué) et l’état de retour de la commande dans le cas contraire. Ce dernier état de retour est au format spécifié dans wait (2). Ainsi, le code de sortie de la commande sera WEXITSTATUS(status) . Au cas où / bin / sh ne pourrait pas être exécuté, l’état de sortie sera celui d’une commande qui exit(127) .

Heureusement, j’ai eu la réponse. la fourchette a échoué en raison d’une défaillance de la mémoire. Ce n’est pas une bonne idée d’utiliser system () call.

Merci pour le soutien et la réponse.