Compréhension d'un code
Posté : lun. 1 déc. 2014 12:26
Bonjour tout le monde, étant nouveau sur le forum, je me présente vite fait. Je m'appele donc Gabriel, j'ai 18ans, et depuis ce début d'année j'ai commencé des études d'informatique. N'ayant jamais pratiqué avant, je galère un peu plus que la bonne majorité des gens de ma promo. On m'a demandé de faire un code, celui de my_ls. Un ami m'a donné son code pour que je comprenne comment commencé ( je ne peux pas tricher, et ne veux pas, je risque trop ^^' ) mais je suis un peu largué, il a utilisé trop de commande que je ne connais pas... Je vous ré écrit le code ci-dessous, alors si quelqu'un a la patience et la gentillesse de m'expliquer, ligne par ligne, ce qu'il fait, ce serait top !
Merci d'avance à la personne qui prendra le temps de m'expliquer
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include "my_ls.h"
int main(int ac, char **av)
{
if (ac == 1)
no_opt();
else if (ac == 2 && !my_strcmp(av[1], "-l"))
opt_l();
return (0);
}
int no_opt()
{
DIR *dirp;
struct dirent *d;
const char *name;
name = ".";
dirp = opendir(name);
if (dirp == NULL)
exit (0);
d = readdir(dirp);
if (d == NULL)
exit (0);
my_putstr(d->d_name);
my_putchar(' ');
while ((d = readdir(dirp)) != NULL)
{
if (d == NULL)
exit (0);
if (d->d_name[0] != '.')
{
my_putstr(d->d_name);
my_putchar(' ');
}
}
my_putchar('\n');
return (0);
}
int opt_l()
{
DIR *dirp;
struct dirent *d;
const char *name;
name = ".";
dirp = opendir(name);
if (dirp == NULL)
exit (0);
d = readdir(dirp);
if (d == NULL)
exit (0);
my_putstr(d->d_name);
my_putchar('\n');
while ((d = readdir(dirp)) != NULL)
{
if (d == NULL)
exit (0);
my_putstr(d->d_name);
my_putchar('\n');
}
return (0);
}
Voila donc son fichier principal, le my_ls.c . Ce que j'ai compris, c'est que si ac == 1, le code effectue la commande my_ls de base, donc ça affiche les éléments du dossier, et sinon, si on entre -l en option, cela les affiches en colonne. Cependant, des tests que j'ai fait, peu importe l'option que l'on met, si il y en a une, le résultat est toujours le même, mais c'est pas important.
Pour que tout ça marche, il a aussi un fichier my_ls.h donc, contenant my_putchar, my_putstr, my_strcmp, my_strlen etc... ainsi que les prototypes des fonctions. Une fois compiler, j'option donc les deux résultats cités ci-dessus, la commande ls et -l (même si n'importe quelle lettre marche aussi).
Cependant, lors de la compilation, un fichier.gch se crée, pourquoi ? Qu'est ce que c'est ?
En espèrant que vous pourrez m'aider, bonne journée à vous !
Merci d'avance à la personne qui prendra le temps de m'expliquer
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include "my_ls.h"
int main(int ac, char **av)
{
if (ac == 1)
no_opt();
else if (ac == 2 && !my_strcmp(av[1], "-l"))
opt_l();
return (0);
}
int no_opt()
{
DIR *dirp;
struct dirent *d;
const char *name;
name = ".";
dirp = opendir(name);
if (dirp == NULL)
exit (0);
d = readdir(dirp);
if (d == NULL)
exit (0);
my_putstr(d->d_name);
my_putchar(' ');
while ((d = readdir(dirp)) != NULL)
{
if (d == NULL)
exit (0);
if (d->d_name[0] != '.')
{
my_putstr(d->d_name);
my_putchar(' ');
}
}
my_putchar('\n');
return (0);
}
int opt_l()
{
DIR *dirp;
struct dirent *d;
const char *name;
name = ".";
dirp = opendir(name);
if (dirp == NULL)
exit (0);
d = readdir(dirp);
if (d == NULL)
exit (0);
my_putstr(d->d_name);
my_putchar('\n');
while ((d = readdir(dirp)) != NULL)
{
if (d == NULL)
exit (0);
my_putstr(d->d_name);
my_putchar('\n');
}
return (0);
}
Voila donc son fichier principal, le my_ls.c . Ce que j'ai compris, c'est que si ac == 1, le code effectue la commande my_ls de base, donc ça affiche les éléments du dossier, et sinon, si on entre -l en option, cela les affiches en colonne. Cependant, des tests que j'ai fait, peu importe l'option que l'on met, si il y en a une, le résultat est toujours le même, mais c'est pas important.
Pour que tout ça marche, il a aussi un fichier my_ls.h donc, contenant my_putchar, my_putstr, my_strcmp, my_strlen etc... ainsi que les prototypes des fonctions. Une fois compiler, j'option donc les deux résultats cités ci-dessus, la commande ls et -l (même si n'importe quelle lettre marche aussi).
Cependant, lors de la compilation, un fichier.gch se crée, pourquoi ? Qu'est ce que c'est ?
En espèrant que vous pourrez m'aider, bonne journée à vous !