Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/12/2011, 12h39   #1
Invité régulier
 
Inscription : mars 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 29
Points : 9
Points : 9
Par défaut utilisation de getopt

bonjour,
je cherche a immiter le fonctionnement de la commande shell ls ,lors de l'éxécution du programme sans argument il affiche pour le répertoire courant :
si j'ai comme option -r j'affiche les répertoires
-f les fichiers
si j'ai rien j'affiche tous.
si j'ai des argument je fait le même fonctionnement pour le répertoire entrée en argument voici le code source
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
 
int main(int argc,char *argv[]){
DIR *var;
int opt;
struct dirent *recup;
if (argc==1){
	printf("pas d'argument\n");
	var=opendir(".");
	if(var==NULL)
		perror("opendir");
	else{
		recup=readdir(var);
 
 
			if(opt = getopt(argc, argv, "rf:")!= -1){
				switch (opt) {
               				case 'r':while(recup!=NULL)
							{if(recup->d_type==DT_DIR);
						 	printf(" %s\n",recup->d_name);
			                                recup=readdir(var);	}
							break;					
					case 'f':while(recup!=NULL)
							{if(recup->d_type==DT_REG);
						 	printf(" %s\n",recup->d_name);
			                                recup=readdir(var);}
							break;
				default:	/*ne rien faire*/				}	
					      }
			else /*pas doption*/
				while(recup!=NULL)
							{printf(" %s\n",recup->d_name);
			                                recup=readdir(var);	}
 
closedir(var);}
}	    
else{
	var=opendir(argv[1]);
	if(var==NULL)
		perror("opendir");
	else{
		if(opt = getopt(argc, argv, "rf:")!= -1){
				switch (opt) {
               				case 'r':while(recup!=NULL)
							{if(recup->d_type==DT_DIR);
						 	printf(" %s\n",recup->d_name);
			                                recup=readdir(var);	}
							break;					
					case 'f':while(recup!=NULL)
							{if(recup->d_type==DT_REG);
						 	printf(" %s\n",recup->d_name);
			                                recup=readdir(var);}
							break;
				default:	/*ne rien faire*/				}	
					      }
			else /*pas doption*/
				while(recup!=NULL)
							{printf(" %s\n",recup->d_name);
			                                recup=readdir(var);	}
 
closedir(var);}
}
return 1;
}
merci d'avance
ps: est ce que c'est possible d'aller plus loin et afficher avec les couleurs exactement la commande ls?
cobra150 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 15h28   #2
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 485
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 485
Points : 9 625
Points : 9 625
Bonjour,

Tu as un soucis d'algorithme :
Code :
1
2
3
4
5
 
Si argc == 1
  ouvrir .
  si ca a reussi
    utiliser getopt
Donc si tu n'as pas d'argument, tu parses les arguments...

Sinon, les couleurs sont dependantes de ton terminal (vt100, xterm, gnome-terminal), mais oui, c'est possible. Commence deja par faire le ls correctement, ensuite tu passeras a la lecture des droits des fichiers.
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 16h27   #3
Invité régulier
 
Inscription : mars 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 29
Points : 9
Points : 9
oui tu as raison malheureusement il y'a un autre souci ,maintenant je peut afficher seulement les fichiers et répertoires sans utiliser d'option ,si j'utilise les options j'ai un message :
opendir: no such file or directory
parcontre j'ai des fichiers et des repertoire? voici le nouveau code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
 
int main(int argc,char *argv[]){
DIR *var;
int opt;
struct dirent *recup;
if (argc==1){
    printf("pas d'argument\n");
    var=opendir(".");
    if(var==NULL)
        perror("opendir");
    else{
        if(opt = getopt(argc, argv, "rf:")!= -1){
            switch (opt) {
                           case 'r':recup=readdir(var);
                     while(recup!=NULL)
                        {if(recup->d_type==DT_DIR)
                         printf(" %s\n",recup->d_name);
                                    recup=readdir(var);    }
                     break;                   
                case 'f':recup=readdir(var);
                     while(recup!=NULL)
                        {if(recup->d_type==DT_REG)
                         printf(" %s\n",recup->d_name);
                                    recup=readdir(var);}
                     break;
                default:printf("argument inconn\n");   
                }
          }
            else /*pas doption*/
                while(recup!=NULL)
                    {printf(" %s\n",recup->d_name);
                             recup=readdir(var);    }
closedir(var);}
}       
else{
    var=opendir(argv[1]);
    if(var==NULL)
        perror("opendir");
    else{
        if(opt = getopt(argc, argv, "rf:")!= -1){
            switch (opt) {
                           case 'r':recup=readdir(var);
                     while(recup!=NULL)
                        {if(recup->d_type==DT_DIR)
                             printf(" %s\n",recup->d_name);
                                    recup=readdir(var);    }
                     break;                   
                case 'f':recup=readdir(var);
                     while(recup!=NULL)
                        {if(recup->d_type==DT_REG)
                             printf(" %s\n",recup->d_name);
                                    recup=readdir(var);}
                     break;
                default:printf("argument inconn\n");   
                    }
      }
            else /*pas doption*/
                while(recup!=NULL)
                    {printf(" %s\n",recup->d_name);
                             recup=readdir(var);    }
closedir(var);}
}       
return 1;
}
j'utilise gnome terminal ,et pour la lecture des droits j'ai fait un programme qui simule le fonctionnement de ls -l ,je doit manipuler la structure stat .
cobra150 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h02.


 
 
 
 
Partenaires

Hébergement Web