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 :

Canoniser un nom de programme


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut Canoniser un nom de programme
    Salut les C,

    je suis en train d'écrire un petit programme de gestionnaire de projets orienté développement de programme.

    Et actuellement, je suis en train de méditer a comment filtrer les caractères d'entrée du nom de programme donnée par l'utilisateur.

    Pour l'instant j'utilise une fonction de la GLib (strcanon(...)) qui permet de passer un string puis une série de caractères autorisée. Ceux n'étant pas valide sont remplacer par des underscores par mes soins.

    Je fait cela afin de pas avoir de problème pour le lancement automatique du programme.

    Les caractères autorisée sont: [a-zA-Z0-9-:_.]

    Mais j'ai une meilleur idée pour cela car il existe une fonction analogue qui permet de lister les caractères interdit et de les remplacer par le caractère voulus (l'underscore).

    Ce que j'attends de vous sont des idées de caractères interdit ne les connaissant pas tous sous Linux.

    Merci pour votre aide précieuse et pour les futurs utilisateurs de mon programme.

    PS: Je peut commencer le listing: ( ) [ ] " ' ~ * $ % ?

    Etc..

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    A ma connaissance, tous les caractères cités sont autorisés pour les noms de fichier sour Unix.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En principe, *n*x autorise tout sauf le caractère nul et le forward slash. Oui, même les caractères non-imprimables, les inférieur/supérieur/pipe, les jokers, etc.

    En revanche, Windows interdit tous ceux que je viens de citer, plus le backslash et le deux-points. Plus les espaces en fin de nom et probablement aussi au début. Le point-virgule (utilisé comme séparateur dans la variable d'environnement PATH sous Windows) n'est PAS interdit.
    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.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,
    Citation Envoyé par Médinoc Voir le message
    En revanche, Windows interdit tous ceux que je viens de citer, plus le backslash et le deux-points. Plus les espaces en fin de nom et probablement aussi au début. Le point-virgule (utilisé comme séparateur dans la variable d'environnement PATH sous Windows) n'est PAS interdit.
    Non, on peut même en mettre plusieurs !

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    OK, merci de la correction.
    Edit: Windows Explorer l'empêche, par contre.
    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.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    OK, merci de la correction.
    Edit: Windows Explorer l'empêche, par contre.
    Beaucoup de choses sont possibles lorsque l'on ne passe pas par l'explorateur. Un jour, un programme avait créer un fichier avec un caractère style 'ù' ou un autre truc étrange, sur mon Windows XP. Dans le logiciel, tout est bien passé et le fichier a été crée, mais après, impossible de le supprimer dans l'explorateur, ni même dans le DOS.
    Donc, beaucoup de choses sont possibles lorsque l'on bidouille.

    Aussi, j'imagine qu'avec Windows 7 et supérieur et le support de l'UNICODE (ou autre technique pour gérer plus que le CP1252 et d'autres tables trop locales) ce genre de problème a diminué.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    En principe, *n*x autorise tout sauf le caractère nul et le forward slash. Oui, même les caractères non-imprimables, les inférieur/supérieur/pipe, les jokers, etc.

    En revanche, Windows interdit tous ceux que je viens de citer, plus le backslash et le deux-points. Plus les espaces en fin de nom et probablement aussi au début. Le point-virgule (utilisé comme séparateur dans la variable d'environnement PATH sous Windows) n'est PAS interdit.
    En principe, *n*x autorise
    Cette haine mdr

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Ce n'est pas une question de haine, mais une question d'avoir un pattern qui matche à la fois "unix" et "Linux".
    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 éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ce n'est pas une question de haine, mais une question d'avoir un pattern qui matche à la fois "unix" et "Linux".
    On aurait pu penser que ça t'arrachait le cerveau d'écrire la chose en entier. My bad =)

  10. #10
    Membre actif Avatar de Abacar94
    Homme Profil pro
    L2 Math-informatique
    Inscrit en
    Novembre 2015
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

    Informations professionnelles :
    Activité : L2 Math-informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 103
    Par défaut
    Citation Envoyé par Luke spywoker Voir le message
    Salut les C,

    je suis en train d'écrire un petit programme de gestionnaire de projets orienté développement de programme.

    Et actuellement, je suis en train de méditer a comment filtrer les caractères d'entrée du nom de programme donnée par l'utilisateur.

    Pour l'instant j'utilise une fonction de la GLib (strcanon(...)) qui permet de passer un string puis une série de caractères autorisée. Ceux n'étant pas valide sont remplacer par des underscores par mes soins.

    Je fait cela afin de pas avoir de problème pour le lancement automatique du programme.

    Les caractères autorisée sont: [a-zA-Z0-9-:_.]
    Si tu veut la liste des éléments qui n’appartiens pas ce intervalle [a-zA-Z0-9-:_.]....voici le programme qui va te les énumérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include<stdio.h>
    main()
    {int I;
     for(I=32;I<=127;I++)
        if(!(I>='a'&&I<='z')&&!(I>='A'&&I<='Z')&&!(I>='0'&&I<='9')&&I!=':'&&I!='_'&&I!='.')
        printf("\n%c",I);
    }

  11. #11
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Bon en faîte j'ai commis une erreur car il n'existe pas de fonction qui prend en argument une liste de caractères interdits, seulement le contraire...

    Brefs, est-ce cela vous gênerais vraiment, si seulement les caractères: [a-zA-Z0-9.:-_] sont autoriser comme dans un nom de programme ?

    Sachant que un paquetage doit commencer par une minuscule et que généralement les nom de programme sont en anglais pour le binaire.

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Luke spywoker Voir le message
    Brefs, est-ce cela vous gênerais vraiment, si seulement les caractères: [a-zA-Z0-9.:-_] sont autoriser comme dans un nom de programme ?
    Nous absolument pas. Unix accepte (presque) tout mais si ensuite toi tu as envie de limiter et que tu écris un code en ce sens tu en as tout à fait le droit.

    Citation Envoyé par Médinoc Voir le message
    En principe, *n*x autorise tout sauf le caractère nul et le forward slash. Oui, même les caractères non-imprimables, les inférieur/supérieur/pipe, les jokers, etc.
    Ouais. Je me souviens à mes débuts j'avais un chef qui listait tous nos fichiers (y compris les cachés) et qui envoyait ça sur l'imprimante pour les examiner ensuite ; style ls -Rals /home |lpr. Je trouvais ça assez idiot vu que si je dois cacher un truc je ne le mettrais certainement pas dans un fichier nommé "supertopsecret" mais bon, c'était un chef quoi.
    J'avais alors créé dans mon home un fichier dont le nom était composé de caractères de commandes à base d'escape pour l'imprimante (c'était encore l'époque des imprimantes à picots et à aiguilles). Quand l'imprimante arrivait à ce nom, elle partait alors en torche avec le charriot qui faisait 500 aller/retours et le papier qui se mettait à reculer dans tous les sens ce qui rendait le listing totalement caviardé à cet endroit (papier déchiré etc). J'étais mort de rire.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Membre actif Avatar de Abacar94
    Homme Profil pro
    L2 Math-informatique
    Inscrit en
    Novembre 2015
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

    Informations professionnelles :
    Activité : L2 Math-informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 103
    Par défaut
    Citation Envoyé par Luke spywoker Voir le message
    Bon en faîte j'ai commis une erreur car il n'existe pas de fonction qui prend en argument une liste de caractères interdits, seulement le contraire...

    Brefs, est-ce cela vous gênerais vraiment, si seulement les caractères: [a-zA-Z0-9.:-_] sont autoriser comme dans un nom de programme ?

    Sachant que un paquetage doit commencer par une minuscule et que généralement les nom de programme sont en anglais pour le binaire.
    Si tu veux imposer ces restrictions, c'est à fait possible.....Mais tu doit faire un effort pour détailler ton résonnement, si j'ai bien compris tu veux faire une fonction qui prend en paramètre une chaîne de caractère et qui ne va accepter que les caractères: [a-zA-Z0-9.:-_] ?????

  14. #14
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    En faîtes je fait cette restriction afin de pas avoir de problème dans mon Makefile, a tout faire, le big boss de mon gestionnaire de projet...

    ---

    Puisque j'ai l'impression d'assister a une réunion de dinosaures (ne vous fâchez pas), quelqu'un pourrait éventuellement apporter ses lumières

    sur le sujet texinfo que j'ai lancer, ça serai vraiment gentil, merci.

    ---

    Car je suis partie du faîte que sans générateur spécialiser j'allais permettre l'utilisation de 3 langages pour la documentation:

    + texinfo

    + Markdown

    + ReST

    Et j'ai eu un accroc avec le texinfo pour certains targets de génération de fichiers.

    Merci pour vos réponses éclairées.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. le nom du programme exécuté
    Par marcel marie dans le forum Langage
    Réponses: 3
    Dernier message: 03/02/2010, 11h03
  2. Récupérer le nom du programme
    Par ChipsterJulien dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 10/01/2010, 18h36
  3. Comment effacer un nom de programme dans Vista
    Par fumesec02 dans le forum Windows Vista
    Réponses: 2
    Dernier message: 18/06/2007, 18h25
  4. Récuperer le nom du programme
    Par Débéa dans le forum Général Python
    Réponses: 1
    Dernier message: 05/01/2007, 11h44
  5. Nom du programme apercu des images
    Par HULK dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 21/04/2006, 15h58

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