Au secours!!Probleme avec les tubes
sabola
Messages postés
10
Statut
Membre
-
loupius Messages postés 789 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
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:
- Au secours!!Probleme avec les tubes
- You tubes - Accueil - Streaming
- Mac tubes - Télécharger - TV & Vidéo
- Save tubes - Télécharger - Téléchargement & Transfert
- Convertisseur you tubes - Guide
- Coupure sur you tube toutes les 3 secondes - Forum Audio
1 réponse
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.
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.