FORUM D’ENTRAIDE INFORMATIQUE (FEI)
Site d’assistance et de sécurité informatique

Entraide pour le programmation en général (tous langages).
Règles du forum : Entraide concernant la programmation informatique en général, tous langages : recherche ou correction d'un code ou d'une fonction, aide à la réalisation d'un projet...
Pour la programmation web (HTML, CSS, PHP, MySQL...), il est conseillé de s'orienter dans le forum Webmastering.
Merci de lire et de respecter la charte générale du forum.
  • Avatar du membre
  • Avatar du membre
Avatar du membre
par Gabriel Oliveira
#152480
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 ! :)
Long-distance relationship

Hello everyone! Lately I have been thinking abou[…]

I appreciate you sharing this knowledge. I adore y[…]

Your information is effective and extremely helpfu[…]

Poppy playtime unblocked is one of the most wel[…]