leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 21 nov. 2004 à 02:15
ah!!!!!!! je croyais pipe pour communiquer entre les processus......bon pour le ls -l, tu regarde les fonctions que je t'ai dis qui te permettront de récuperer ttes les infos nécessaires sur tes fichiers pour simuler la commande, ensuite une fois que tu auras toutes les infos, ca sera juste de la manipulation de tableaux. regarde le man des fonctions données, tu y verras deja plus clair puis reviens poser tes questions
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 20 nov. 2004 à 19:34
pour le ls -l, tu fais un proc qui exploite les fonctions suuivantes:
(man 3 plutot que man 2 pour celles la, leur utilisation est plus simple)
opendir pour explorer un repertoire
readdir pour lire le contenu du repertoire
closedir
rewinddir si tu ne referme pas le repertoire: pr revenir au debut
selon le repertoire readlink voir sur quoi pointe un lien
la c'est man 2
stat poura voir un paquet d'infos sur le fichier.
le sujet est si vague que ca? ils te disent pas que dois faire chaque process? pr le wc-l je peux pas t'aider tant que tu me rappelle pas ce que jais wc avec l'option -l.
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 21 nov. 2004 à 13:34
tu regarderas la syntaxe qui n'est pas celle la pour les fonctions mais je l'ai pas en tete
int main (int argc, char * argv [])
{
int pfd [2];
if (!Fork())
{
//
//declaration de tes variables genre Dir
close pfd [0];
opendir (argv [1]);
unsigned i = 0;
for ( ; (Dir= readdir()) ; ++i);
rewinddir (argv [1])
const TabSize = i;
char * Tab [i];
//tab [0] devra prendre, a la fin de l'execution la ligne "total truc"for (i 1 ; (Dir readdir()); ++i)
if (!strcmp (Dir.d_name, ".") && !strcmp (Dir.d_name, ".."))
Tab [i] = Dir.d_name;
for (i = 0; i < TabSize; ++i)
{
stat = Tab [i];
//apres pr cette partie pr recuperer les infos, tu te debrouilleras, je vais pas tt te faire
}
for (i = 0; i < TabSize; ++i)
{
ecrire ds un pipe pr communiquer au pere toutes les infos pour qu'il puisse compter, dsl pas envie de le coder, a la rigueur tu devrais faire une struct pr encapsuler tes données, je sais pas si tu peux pas tt simplement utiliser la struct stat, verifie ds le man que ca contient ts les champs voulus
}
}
else
{
fermer le fd en ecriture
lire ds le pipe
compter
afficher comme il faut le nombre de lignes comptées (sans oublier la ligne qui contient "total truc")
}
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 21 nov. 2004 à 14:35
ben c'est ce que je t'ai fait, t'as ici l'algo, la trame et la moitié du code.......
tu fais un processus qui fait un ls -l puis qui communique ce qu'il a fait a l'autre processus, ce processus va alors compter les lignes rendues. j'ai l'impression de t'avoir déjà fait une bonne partie du boulot, alors prend ton man et essaie de coder. c'est pas a moi de faire ton boulot..........surtt que je l'ai déjà beacoup fait. la tu as de quoi commencer
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 21 nov. 2004 à 18:08
et au fait en ce qui concerne le wc -l:
dans le processus qui fait le ls -l, tu crée un tableau de char* qui devraient correspondre a ton affichage (n'oublie donc pas les '\n'), puis tu envoie dans un pipe tous les caractères dans un pipe.
dans le processus qui effectue le wc-l, tu récupère tous les caractères de ton pipe, et tu compte le nombre de '\n', ca te donne le nombre de lignes. c'est ce que tu afficheras au final
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 21 nov. 2004 à 22:03
faut pas pousser mémé ds les orties non plus, c'est pas compliqué, t'as un man sous la main.....et meme si c'est compliqué c'est ton boulot pas le mien, d'autant que le code que je t'ai mis t'as déjà la moitié du code.....