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 :

nom de fichier incrémentable


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 24
    Points : 26
    Points
    26
    Par défaut nom de fichier incrémentable
    Bonjour à tous,
    Je code sous windriver worckbench 3.2,
    j'ai un soucis avec la librairie ioLib.h
    j'utilise la fonction open sur une flash pour un stockage de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fd_FLASH = open ("/ata0a/fichier1", O_RDWR | O_CREAT, 0644 );
    mais j'aimerais bien segmenter mes fichiers pour ne pas avoir 1 seul fichier lourd.
    L'idée serait de remplacer le 1 par un compteur incrémentale histoire d'écrire dans un nouveau fichier juste en incrémentant le compteur.
    En gros je voudrais trouver une maniére plus "intelligente" de faire
    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
          switch (VI_fichier_num)
    			{
    			case 1: 
    				fd_FLASH = open ("/ata0a/fichier1", O_RDWR | O_CREAT, 0644 );
    				break;
    			case 2: 
    				fd_FLASH = open ("/ata0a/fichier2", O_RDWR | O_CREAT, 0644 );
    				break;
    			case 3: 
    				fd_FLASH = open ("/ata0a/fichier3", O_RDWR | O_CREAT, 0644 );
    				break;
    			case 4: 
    				fd_FLASH = open ("/ata0a/fichier4", O_RDWR | O_CREAT, 0644 );
    				break;
    			case 5: 
    				fd_FLASH = open ("/ata0a/fichier5", O_RDWR | O_CREAT, 0644 );
    				break; 
        //etc...
    puisque si je dois prévoir jusqu'au fichier imaginons 140, de un c'est très moche dans mon code et de deux c'est un peu chiant à écrire...
    PS: J'ai mis 0644 en dernier paramètre de la fonction open car je ne sais pas à quoi cela correspond, donc j'ai fait comme dans l'exemple donné par windriver.
    Merci d'avance pour votre réponse

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    C'est surtout affreusement statique et impossible à maintenir ! Il te faut convertir à la volée la valeur du compteur en chaîne et la concaténer au chemin de base. C'est trivial si tu as accès à snprintf.

    0644 est un code de permission en base 8 (octal, cf. page de manuel d'open). Cela correspond à une autorisation d'accès en lecture et écriture pour le propriétaire, et en lecture pour le groupe du propriétaire et tous les autres.

  3. #3
    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
    Généralement on fait comme ça:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char nomFichier[FILENAME_MAX]="";
    snprintf(nomFichier, FILENAME_MAX, "/ata0a/fichier%d", VI_fichier_num);
    fd_FLASH = open (nomFichier, O_RDWR | O_CREAT, 0644 );
    Sauf qu'on préfère utiliser fopen() plutôt qu'open(), car fopen() fait partie du standard C alors que open() fait partie du standard POSIX.
    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 éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par neophyte_ingé Voir le message
    PS: J'ai mis 0644 en dernier paramètre de la fonction open car je ne sais pas à quoi cela correspond, donc j'ai fait comme dans l'exemple donné par windriver.
    Bonjour

    Ce sont les droits (en octal, comme l'a dit Matt_Houston) que tu donnes à ton fichier à sa création. Donc déjà, ça n'a de sens que si tu crées le fichier ; si tu en ouvres un qui existe déjà, ses droits sont déjà positionnés donc quel que soit le nombre que tu mets, ça n'aura aucun effet.
    Ils correspondent aux droits Unix du chmod (donc là aussi ça n'a de sens que si tu travailles sur Unix/Linux). Le premier "6" se lit "read (4) + write (2) pour le propriétaire du fichier". Le second "6" donne les mêmes droits mais pour ceux qui, sans être propriétaire, sont membres du même groupe que le groupe du fichier. Le 3° chiffre "4" correspond juste au droit "r" pour ceux qui ne font partie d'aucune des deux premières catégories (les "autres").
    Ainsi chaque chiffre de 0 à 7 correspondra à une combinaisons de rwx (4=read, 2=write et 1=exécution) et s'appliquera aux populations user pour le premier, group pour le second et other pour le 3° (droits "ugo"). Et le premier chiffre "0" est une convention d'écriture du C signifiant "nombre octal".
    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]

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 24
    Points : 26
    Points
    26
    Par défaut Merci à tous
    Je vous remercie tous pour vos précieuses aides.
    Je pense que j'ai pigé le truc, merci à tous pour vos enseignements!

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

Discussions similaires

  1. [Débutant] strcat et nom de fichier incrémenté
    Par degseb dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/12/2010, 15h15
  2. Incrémenter 1 à des noms de fichier
    Par vanitom dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 01/07/2010, 13h24
  3. incrémentation auto d'un nom de fichier
    Par gentilman_delphi dans le forum Débuter
    Réponses: 3
    Dernier message: 13/03/2010, 14h07
  4. [Débutant] Ecriture d'un nom de fichier avec double incrémentation
    Par MTN84 dans le forum MATLAB
    Réponses: 2
    Dernier message: 25/02/2010, 09h52
  5. [dlmwrite] Incrémentation nom de fichier
    Par lloyd_r dans le forum MATLAB
    Réponses: 8
    Dernier message: 12/05/2009, 16h40

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