Au secours!!Probleme avec les tubes

sabola Messages postés 10 Statut Membre -  
loupius Messages postés 789 Statut Membre -
Bonjour,

Je suis debutant en info ,je programme sous unix et j'ai un exo dont l'ennoncé est la suivante:

Ecrire un programme qi donne naissance à un processus fils(par fork),lequel écrit le resultat de la commande "date" dans un tube,il faut ensuite rediriger la sortie standard du porcessus fils vers le tube (par dup2),puis executer la commande "date"(à l'aide de execlp) avec option "+%d/%m/%Y a %Hh%M"(de la commande date).

Le processus père lit le tube,caractère par caractère (à l'aide de read),puis affiche à l'écran la date sous la forme "Date du jour:....."

Voici mon code:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/wait.h>

int main( int argc,char* argv[])
{

int p[2];char c;
int i;
pipe(p);

if(pipe(p)==-1)

{ printf("erreur pipe");

}

switch(fork())

{ case -1:

perror("erreur fork");
exit(1);

break;

case 0:/*le processus fils*/

dup2(p[1],1);

close(p[0]);

close(p[1]);

execlp("date","date","+%d/%m/%Y a %Hh%M",NULL);

perror("erreur execlp par le fils");

exit(1);

default:/*processus pere*/

close(p[1]);

for(i=0;i<20;i++)
{
read(p[0],"%c",1);

write(1,"%c",c);
close(p[0]);
}
}
return EXIT_SUCCESS;

}

Mais quand je compile et je l'execute j'ai un affiche du genre:

%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�%c�

Je n'arrive à voir qu'est-ce qui ne marche pas bien.

Aidez-moi SVP!

Je vous remercie d'avance
A voir également:

1 réponse

loupius Messages postés 789 Statut Membre 148
 
Je n'ai pas tout lu, mais il y a deux lignes qui m'interpellent:
read(p[0],"%c",1);
write(1,"%c",c);

Les prototypes sont:
- size_t read (int descripteur, void* buffer, size_t taille)
- size_t read (int descripteur, const void* buffer, size_t taille)
'buffer' représente l'adresse d'une zone mémoire qui permet, dans le cas du 'read', de récupérer la lecture et donc ne peut être, en aucun cas, "%c".
Bonne réflexion.
0