Im travaillant dans c (plus ou moins pour la première fois) pour uni, et j'ai besoin de générer un MD5 à partir d'un tableau de caractères. L'affectation spécifie que cela doit être fait en créant un canal et en exécutant la commande md5
sur le système.Comment puis-je insérer une chaîne dans une commande popen() dans C?
Je suis arrivé jusqu'ici:
FILE *in;
extern FILE * popen();
char buff[512];
/* popen creates a pipe so we can read the output
* of the program we are invoking */
char command[260] = "md5 ";
strcat(command, (char*) file->name);
if (!(in = popen(command, "r"))) {
printf("ERROR: failed to open pipe\n");
end(EXIT_FAILURE);
}
Maintenant, cela fonctionne parfaitement (pour une autre partie de la mission qui a besoin d'obtenir le MD5 pour un fichier) mais je ne peux pas l'entraînement comment diriger une chaîne en elle .
Si je comprends bien, je dois faire quelque chose comme:
FILE * file = popen("/bin/cat", "w");
fwrite("hello", 5, file);
pclose(file);
Ce qui, je pense, exécuterait chat et de passer « Bonjour » par StdIn. Est-ce correct?
Avez-vous exécutez ce deuxième code de bloc? Si vous aviez, vous vous rendrez compte que fwrite prend un autre paramètre, qui est la taille d'un élément de votre chaîne, donc vous auriez probablement essayé fwrite ("hello", sizeof (char), 5, fichier); et a constaté que cela fonctionne vraiment. Que vous soyez ou non censé le faire de cette façon ou par un appel à pipe() puis fork() un enfant, fermez les extrémités du pipe, et envoyez des infos avec write() et sprintf() est une idée différente . – prelic