IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Gestion des processus sous Linux


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Gestion des processus sous Linux
    Bonjour
    J'ai écris un programme qui permet de créer un processus fils, d'afficher le PID et l'état de chaqun des deux processus (le père et le fils), seulement le processus fils va faire une tâche : il va appeler (ou executer) un autre programme que j'ai écris.
    Le problème : après la compilation du premier programme j'ai eu les erreurs suivantes :

    processu.c: In function ‘main’:
    processu.c:29: warning: missing sentinel in function call
    Si quelqu'un peut m'aider pour résoudre ce problème ?
    Merci d'avance.

    Voici le code source des deux programmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     /*------code source de processus.c:-------*/
     
     #include<unistd.h>
     #include<stdio.h>
     #include<stdlib.h>
     int fils,pidfils,iden;
     char etat1[1024];
     char etat2[1024];
     main()
     {
     int pid_p;
     pid_p=getpid();
     printf("pere: je suis le processus pere mon pid=%d\n",getpid());
     sleep(1);
     sprintf(etat1,"ps -o s -p%d",pid_p);
     system(etat1);
     iden=fork();
     if(iden==-1)
     {
     printf("erreur de creation de processus fils\n");
     exit(1);
     }
     if(iden==0)
     {
     int pid_f;
     pid_f=getpid();
     printf("\nfils: je suis le processus fils mon pid=%d\n\n",pid_f);
     sprintf(etat2,"ps -o s -p%d",pid_f);
     system(etat2);
     sleep(1);
     execl("prog","prog",0);
     }
     else
     {
     printf("\npere: maintenant je dors 5 secondes\n");
     sleep(5);
     printf("pere: je suis reveille\n\n");
     pidfils=wait(&fils);
     printf("pere: mon processus fils termine son execution et son pidfils=%d\n\n",pidfils);
     }
     }
     
     /*-----------code source de prog.c-----------*/
     #include<sys/types.h>
     #include<sys/wait.h>
     
     main()
     {
     printf("\n\t*************PROGRAMME EXECUTE PAR LE FILS******************\n");
     printf("\nle programme: je suis le programme executer par le fils\n");
     printf("\nle programme: l'identificateur de mon pere ppid=%d\n",getppid());
     printf("\nle programme: le fils va vous donnez la date d'haujourd'huit\n");
     printf("\nle programme:\t");
     execlp("/usr/bin/date","/usr/bin/date",NULL);
     }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    La ligne 29, ne serait-ce pas celle de l'appel à execl() ?

    Si je peux me fier à cette doc, il est possible que le zéro doive être explicitement casté en char*.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Points : 622
    Points
    622
    Par défaut
    LE dernier paramètre de execl doit NULL.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    J'ajoute, pour compléter la réponse de publicStaticVoidMain, qu'une sentinelle est une valeur balise que l'on place à la fin d'une suite de données, précisément pour détecter cette fin le moment venu sans que l'on ait à tenir un compteur à jour pour le savoir.

    À noter également que execl est une fonction variadique et que le type des paramètres n'est pas défini par défaut. Le compilateur peut reconnaître le paramètre passé sur la forme et générer un avertissement mais, dans tous les cas, comme je n'ai jamais travaillé sur des plate-formes qui définissaient NULL autrement qu'avec un zéro, ça devrait fonctionner quand même malgé le warning. Ce n'est bien sûr pas une raison pour le laisser en l'état. :-)

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    comme je n'ai jamais travaillé sur des plate-formes qui définissaient NULL autrement qu'avec un zéro,
    moi c'est le contraire, pour le moment, toutes les plateformes sur lesquelles j'ai bossé définissait NULL correctement (== qui fonctionne dans tous les cas) à savoir:
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Du moins, en C. Quand on passe au C++, c'est une autre histoire.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    moi c'est le contraire, pour le moment, toutes les plateformes sur lesquelles j'ai bossé définissait NULL correctement (== qui fonctionne dans tous les cas) à savoir:
    C'est ce que je voulais dire. La valeur numérique est un zéro. Une fois compilée, c'est bien cette valeur que l'on retrouve chargée dans le code assembleur.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pour être plus exact, c'est une valeur que le C évalue à zéro pour un pointeur. Mais il me semble avoir lu que la norme n'imposait pas que ce soit la même valeur zéro que pour un int...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Une fois compilée, c'est bien cette valeur que l'on retrouve chargée dans le code assembleur.
    Non, ça dépend de l'architecture.
    On assigne la valeur spéciale 0 à un pointeur afin d'en faire un pointeur nul, à partir de là, ce qui se passe en dessous est totalement dépendant de l'implémentation bien que souvent, cela soit directement traduit en "adresse 0x0" sur la plupart des systèmes.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En clair, la seconde partie de ce code n'est pas garantie être exécutée partout:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void* toto = NULL;
    if(toto == 0)
    	puts("As pointer : NULL");
    if( *(intptr_t*)&toto == 0)
    	puts("As integer : NULL");
    Note que je n'ai rien dit sur le cast direct de pointeur en intptr_t, car je ne me souviens plus si la norme dit qu'il y a conversion (comme pour les flottants) ou non.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Note que je n'ai rien dit sur le cast direct de pointeur en intptr_t, car je ne me souviens plus si la norme dit qu'il y a conversion (comme pour les flottants) ou non.
    7 A pointer to an object or incomplete type may be converted to a pointer to a different
    object or incomplete type. If the resulting pointer is not correctly aligned for the
    pointed-to type, the behavior is undefined. Otherwise, when converted back again, the
    result shall compare equal to the original pointer.
    When a pointer to an object is converted to a pointer to a character type,
    the result points to the lowest addressed byte of the object.
    Successive increments of the result, up to the size of the object, yield pointers
    to the remaining bytes of the object.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    J'ai du mal à voir le rapport entre le passage cité et ma question...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    J'ai du mal à voir le rapport entre le passage cité et ma question...
    Tu convertis un (void**) en (intptr_t*), ce passage de la norme précise le comportement dans ce cas.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Oui, mais là, les deux sont alignés: C'est un vrai cast de pointeur à pointeur, et je sais ce qu'il fait.

    La question que je me posais, c'est au sujet de ce qui se passe si je ne fais pas ça:
    Si j'évalue (intptr_t)toto dans un environnement où un pointeur nul n'est pas binairement égal à un entier nul, la valeur obtenue sera-t-elle la même valeur binaire, ou sera-t-elle convertie?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Oui, mais là, les deux sont alignés: C'est un vrai cast de pointeur à pointeur, et je sais ce qu'il fait.

    La question que je me posais, c'est au sujet de ce qui se passe si je ne fais pas ça:
    Si j'évalue (intptr_t)toto dans un environnement où un pointeur nul n'est pas binairement égal à un entier nul, la valeur obtenue sera-t-elle la même valeur binaire, ou sera-t-elle convertie?
    ok dans ce cas:
    3 An integer constant expression with the value 0, or such an expression cast to type
    void *,is called a null pointer constant. If a null pointer constant is converted to a
    pointer type, the resulting pointer,called a null pointer,is guaranteed to compare unequal
    to a pointer to any object or function.

    4 Conversion of a null pointer to another pointer type yields a null pointer of that type.
    Any two null pointers shall compare equal.

    5 An integer may be converted to any pointer type. Except as previously specified, the
    result is implementation-defined, might not be correctly aligned, might not point to an
    entity of the referenced type, and might be a trap representation.

    6 Any pointer type may be converted to an integer type. Except as previously specified, the
    result is implementation-defined. If the result cannot be represented in the integer type,
    the behavior is undefined. The result need not be in the range of values of any integer
    type.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  16. #16
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    OK, merci. Donc, selon l'implémentation, ça peut aussi bien être l'un que l'autre. Le jour où je tomberai sur une plate-forme exotique, il faudra que je pense à y jeter un coup d'œil...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Nouveau Candidat au Club
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    J'ajoute, pour compléter la réponse de publicStaticVoidMain, qu'une sentinelle est une valeur balise que l'on place à la fin d'une suite de données, précisément pour détecter cette fin le moment venu sans que l'on ait à tenir un compteur à jour pour le savoir.

    À noter également que execl est une fonction variadique et que le type des paramètres n'est pas défini par défaut. Le compilateur peut reconnaître le paramètre passé sur la forme et générer un avertissement mais, dans tous les cas, comme je n'ai jamais travaillé sur des plate-formes qui définissaient NULL autrement qu'avec un zéro, ça devrait fonctionner quand même malgé le warning. Ce n'est bien sûr pas une raison pour le laisser en l'état. :-)

    Justement il s'execute normalement malgé le warning mais ce même problème s'est affiché dans un autre programme que j'ai écris mais je n'est pas mis l'instruction execl() (l'execution du programme marche normalement), seulement je veux comprendre ces erreurs sont dû à quoi ?

  18. #18
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par progdevlop Voir le message
    Justement il s'execute normalement malgé le warning mais ce même problème s'est affiché dans un autre programme que j'ai écris mais je n'est pas mis l'instruction execl() (l'execution du programme marche normalement), seulement je veux comprendre ces erreurs sont dû à quoi ?
    C'est fonction sont déclarés avec un attribut GCC particuliers nommé sentinel:
    Citation Envoyé par http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Function-Attributes.html#Function-Attributes
    sentinel
    This function attribute ensures that a parameter in a function call is an explicit NULL. The attribute is only valid on variadic functions. By default, the sentinel is located at position zero, the last parameter of the function call. If an optional integer position argument P is supplied to the attribute, the sentinel must be located at position P counting backwards from the end of the argument list.

    __attribute__ ((sentinel))
    is equivalent to
    __attribute__ ((sentinel(0)))


    The attribute is automatically set with a position of 0 for the built-in functions execl and execlp. The built-in function execle has the attribute set with a position of 1.

    A valid NULL in this context is defined as zero with any pointer type. If your system defines the NULL macro with an integer type then you need to add an explicit cast. GCC replaces stddef.h with a copy that redefines NULL appropriately.

    The warnings for missing or incorrect sentinels are enabled with -Wformat
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ceci confirme donc que le warning apparaissait parce que le zéro n'était pas explicitement casté.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Gestion des Processus sur Linux
    Par 3logy dans le forum Débuter
    Réponses: 4
    Dernier message: 11/11/2010, 15h45
  2. Gestion des perfs sous linux
    Par yanis97 dans le forum Linux
    Réponses: 3
    Dernier message: 21/02/2009, 21h29
  3. Empiler et dépiler des processus sous Linux ? Comment gérer la pile ?
    Par Leschocolats dans le forum Administration système
    Réponses: 2
    Dernier message: 18/12/2008, 21h26
  4. Outils de gestion des fichiers sous Linux
    Par achmn dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 04/06/2008, 11h54
  5. gestion des quotas sous linux
    Par mrrenard dans le forum Administration système
    Réponses: 2
    Dernier message: 05/02/2008, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo