Forum Programmation.c reconnaitre un nom de fichier

Posté par  .
Étiquettes : aucune
0
19
mai
2006
Bonjour,

voilà mon code!
en fait je voudrais que cette expression( else if (S_ISDIR(infofichier.st_mode))) veuille dire : " si ce que vous avez donné en argument est un nom de fichier alors ".. la suite

Quelqu'un aurait il une solution ??

Merci Mariah

int main(int argc, char **argv)
{
int i=1;
int a;
FILE *f;
char *tmp;
struct stat infofichier;

tmp=argv[i];
if ((tmp[0] == '-') && (tmp[2]=='\0'))
{
switch(tmp[1])
{
case 'a':
a=1;
mydu_a ();
break;
case 's':
a=0;
mydu_s ();
break;
}
}
else if (S_ISDIR(infofichier.st_mode))
{
mydu();
}
else printf ("Erreur\n");
}
  • # Quelques conseils

    Posté par  . Évalué à 3.

    Salut,

    Tout d'abord je te conseille d'utiliser getopt pour analyser les arguments passés sur la ligne de commande.

    Ensuite charger l'argument dans un char* plutôt que d'utiliser tmp[2]

    Il sera alors plus facile d'ajouter des nouveaux arguments et le code sera plus lisible

    voir http://vergil.chemistry.gatech.edu/resources/programming/c-t(...)
  • # Pour vérifier le fichier maintenant

    Posté par  . Évalué à 2.

    http://users.actcom.co.il/~choo/lupg/tutorials/handling-file(...)


    /* structure passed to the stat() system call, to get its results. */
    struct stat file_status;

    /* check the status information of file "foo.txt", and print its */
    /* type on screen. */
    if (stat("foo.txt", &file_status) == 0) {
    if (S_ISDIR(file_status.st_mode))
    printf("foo.txt is a directory\n");
    if (S_ISLNK(file_status.st_mode))
    printf("foo.txt is a symbolic link\n");
    if (S_ISCHR(file_status.st_mode))
    printf("foo.txt is a character special file\n");
    if (S_ISBLK(file_status.st_mode))
    printf("foo.txt is a block special file\n");
    if (S_ISFIFO(file_status.st_mode))
    printf("foo.txt is a FIFO (named pipe)\n");
    if (S_ISSOCK(file_status.st_mode))
    printf("foo.txt is a (Unix domain) socket file\n");
    if (S_ISREG(file_status.st_mode))
    printf("foo.txt is a normal file\n");
    }
    else { /* stat() call failed and returned '-1'. */
    perror("stat");
    }


    Qu'est-ce qu'on dit ? Merci google :D
    • [^] # Re: Pour vérifier le fichier maintenant

      Posté par  . Évalué à 0.

      Pourquoi faire google quand on a les pages de manuel pré-installées ? Au hasard, man stat aurait fait l'affaire ( http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/(...) pour une version française en ligne). Sinon, les spécifications POSIX (qui définissent tout ça) sont disponibles à http://www.opengroup.org/bookstore/catalog/t041.htm gratuitement.
      • [^] # Re: Pour vérifier le fichier maintenant

        Posté par  (site web personnel) . Évalué à 2.

        L'accès aux specs POSIX est payant. C'est SUS qui est gratuit mais c'est toujours mieux que d'utiliser Google, les .h ou les pages de man locales.

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

        • [^] # Re: Pour vérifier le fichier maintenant

          Posté par  . Évalué à 1.

          POSIX payant ? Il faudra que tu me donnes le lien, parce que le lien que j'ai donné donne accès à la version HTML en ligne de
          The Open Group Base Specifications Issue 6
          IEEE Std 1003.1, 2004 Edition
          Copyright © 2001-2004 The IEEE and The Open Group

          Et j'ai aussi http://www.opengroup.org/austin/papers/posix_faq.html
          Q0. What is POSIX? What is POSIX.1?

          POSIX is a registered trademark of the IEEE.
          [...]
          Although originated to refer to the original IEEE Std 1003.1-1988, the name POSIX more correctly refers to a family of related standards: IEEE Std 1003.n (where n is a number) and the parts of ISO/IEC 9945. The term POSIX was originally used as a synonym for IEEE Std 1003.1-1988. A preferred term for that standard, POSIX.1, emerged. This maintained the advantages of readability of the symbol ``POSIX'' without being ambiguous with the POSIX family of standards.
          [...]
          Q3. What is the latest version of POSIX.1?

          The 2004 edition of the 1003.1 standard was published on April 30th 2004, and updates the 2001 edition of the standard to include Technical Corrigendum 1 (TC1) and Technical Corrigendum 2 (TC2). The 2004 Edition is formally known as:

          IEEE Std 1003.1, 2004 Edition
          The Open Group Technical Standard Base Specifications, Issue 6

          Includes IEEE Std 1003.1-2001, IEEE Std 1003.1-2001/Cor 1-2002 and IEEE Std 1003.1-2001/Cor 2-2004

          and its worth noting that within the text the standard is still referred to as IEEE Std 1003.1-2001.

          Donc il s'agirait bien de la dernière version de la norme POSIX qui serait dispo sur ce site.
          Ainsi que http://www.unix.org/version3/ieee_std.html
          The core of the Single UNIX Specification, Version 3 is also IEEE Std 1003.1. The latest 2004 edition incorporates IEEE Std 1003.1-2001 and two technical corrigendum. IEEE Std 1003.1-2001 is a major revision and incorporates IEEE Std 1003.1-1990 (POSIX.1) and its subsequent amendments, and IEEE Std 1003.2-1992 (POSIX.2) and its subsequent amendments, combined with the core volumes of the Single UNIX Specification, Version 2. It is technically identical to The Open Group, Base Specifications, Issue 6; they are one and the same documents, the front cover having both designations.


          Mais il est vrai que, en faisant un rapide tour sur le site ieee.org , j'ai trouvé une page de souscription payante pour accéder aux normes IEEE... Finalement, je me suis peut-être gourré, mais dans ce cas, il faudra qu'on m'explique pourquoi Open Group prétend distribuer un document technically identical à la dernière version de la norme POSIX, alors que l'IEEE interdit sa reproduction gratuite ( http://shop.ieee.org/ieeestore/Product.aspx?product_no=SE952(...) ).
          • [^] # Re: Pour vérifier le fichier maintenant

            Posté par  (site web personnel) . Évalué à 3.

            Relis ce que tu cites. POSIX est compris dans Single Unix Specifications mais ça n'est pas la même chose. Ca veut dire que si on se base uniquement sur SUS, on peut écrire des trucs qui ne sont pas compatibles POSIX quand même. En pratique c'est rarement un problème.
            http://www.unix.org/what_is_unix/single_unix_specification.h(...)

            il faudra qu'on m'explique pourquoi Open Group prétend distribuer un document technically identical à la dernière version de la norme POSIX, alors que l'IEEE interdit sa reproduction gratuite

            On peut avoir deux spécifications techniquement identiques sans que ça soit des copies (ce qui violerait le copyright).

            pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

            • [^] # Re: Pour vérifier le fichier maintenant

              Posté par  . Évalué à 0.

              En effet... Ce qui m'a trompé, c'est "The core of the Single UNIX Specification, Version 3 is also IEEE Std 1003.1". C'est le "noyau" de la SUS qui est POSIX, et pas toute la SUS... Mea culpa. Je ferai plus attention la prochaine fois que je donnerai le lien.

              On peut avoir deux spécifications techniquement identiques sans que ça soit des copies (ce qui violerait le copyright).
              Moui. Dans l'hypothèse de deux groupes indépendants qui auraient la même idée et la publieraient séparément, je suis d'accord. Mais dans le cas SUS/POSIX, qu'elles soient identiques (mis à part les extensions SUS) sans être copies l'une de l'autre... ça me semblerait une grosse coïncidence. Mais peut-être s'agit-il d'un cas semblable au Working Group du langage C au sein de l'ISO, qui possède les droits sur les drafts de la norme C, alors que l'ISO possède les droits sur les normes, ce qui fait que le WG a pu décider de publier les drafts en accès libre sur leur site.

              J'en apprends tous les jours ;)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.