• # Impossible

    Posté par . En réponse au message Communication entre processus avec pipe() et dup2().. Évalué à 3. Dernière modification le 28 février 2020 à 19:54.

    /* Connecte STDIN a l'entrée du pipe 1 */

    Tu connectes une entrée à une entrée ...

    /* Connecte STDOUT a la sortie du pipe 2 */

    puis une sortie à une sortie.

    ça peut pas marcher.

    Une sortie envoie ses données vers une entrée, et une entrée ne lit que depuis une sortie

    Sinon:
    https://linux.die.net/man/2/read

    On success, the number of bytes read is returned (zero indicates end of file), and the file position is advanced by this number. It is not an error if this number is smaller than the number of bytes requested; this may happen for example because fewer bytes are actually available right now (maybe because we were close to end-of-file, or because we are reading from a pipe, or from a terminal), or because read() was interrupted by a signal. On error, -1 is returned, and errno is set appropriately. In this case it is left unspecified whether the file position (if any) changes.

    Tu ne testes pas la valeur de retour de ton write.

    Enfin, d'après le man de malloc:

    Description
    The malloc() function allocates size bytes and returns a pointer to the allocated memory. The memory is not initialized. If size is 0, then malloc() returns either NULL, or a unique pointer value that can later be successfully passed to free().

    Ce doit être ça la cause de ton problème: pour ne pas l'avoir, tu devrais tester le nombre de caractères récupérés sur stdin ou depuis ton pipe, et n'écrire que le contenu de ton buffer. Tu éviterais le problème de l'erreur lors de la deuxième exécution (tu utilises une zone mémoire réallouée après avoir été libérée, et comme elle est pas initialisée, elle contient des résidus de tes précédentes écritures/lectures).