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

Linux Discussion :

creer et ecrire dans un fichier


Sujet :

Linux

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut creer et ecrire dans un fichier
    Bonjour,

    Je voudrais bien ecrire un programme en C en utilisant les appels systeme Linux qui permet de créer un fichier (avec extension que je choisit moi-meme) et d'écrire dedans.

    Y'a t-il quelqu'un qui peut m'aider sur ça?
    Merci d'avance.

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Citation Envoyé par CANADG Voir le message
    Y'a t-il quelqu'un qui peut m'aider sur ça?
    bien sûr :

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    salut,


    bien sûr :
    Bonjour,
    Merci pour ton retour de message .
    Mon problème c'est que j'ai utilisé ces fonctions pour copier un fichier mais j'arrive pas à le faire pour créer un fichier .txt contenant des infos sur un fichier en entrée ( une sorte d'archive).
    Par exemple au lieu d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%o",fileStat.st_mode);
    pour afficher sur la console le mode d'un fichier en entrée , je veux que cette information( le mode d'un fichier en entrée) soit affichée dans le fichier qui va être crée .

    Et aussi je sais pas comment faire pour que le fichier crée ait une extension .txt ou n'importe quelle extension que je choisis à l'avance.
    Merci d'avance.

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut


    bon, reprenons doucement, si tu étais allé lire les liens que je t'ai donné tu aurais possiblement déjà ta réponse :
    • la fonction open() sert à ouvrir ET à créer des fichiers
    • la fonction read() sert à lire les octets contenus dans le fichier
    • la fonction write() sert à écrire dans le fichier
    • la fonction close() sert à fermer le descripteur du fichier quand on a fini de travailler avec


    ces quatre fonctions correspondent aux appels systèmes basiques pour manipuler les fichiers (ce que tu souhaitais dans ton premier post donc)

    printf() n'est ni un appel système ni une fonction pour écrire dans un fichier, on pourrait envisager d'utiliser fprintf() mais ce n'est pas là non plus un appel système, c'est une fonction de la libc

    à moins de faire des mélanges dans ton code en mixant des fonctions de la libc (comme sprintf() par exemple) et les appels systèmes (en l'occurrence write()) tu n'as pas moyen d'écrire dans un fichier à l'aide d'une chaine de formatage (le fameux "%o\n"), c'est une facilité fournie par la libc ! tu seras donc obligé d'écrire ton nombre octal par d'autres moyens, en créant une fonction pour convertir explicitement ton nombre en une chaine de caractères qui le représente (char * convertirOctal(int num) ?)

    enfin acté qu'ici il s'agit plus d'un problème de compréhension du langage que réellement d'une problématique liée à la programmation système, je t'invites à poster dans la section Langage C / Débutant comme pour ton autre discussion la prochaine fois (c'est un détail)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Je crois qu'à la fin de vais faire un mélange entre des fonctions dela libc et les appels systemes comme vous me l'avez conseillé ... mais le probleme c'est que lors de l'ecriture dans le fichier crée j'arrive à écrire le contenu du fichier du depart (le texte qu'il contient),mais ce que je veux c'est que le fichier crée contient ,à part le contenu du fichier du depart, des infos sur ce fichier( de depart) exemple si je fais ça :



    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
    struct stat fileStat;                       
    		if(stat(source_name,&fileStat) < 0){
    			perror("error opening the file");
    			return 1;
    		   }                                                        
                         int is_directory = 0;
    		     int is_symlink = 0;
     
    		     // Show the type of file
    		     switch (fileStat.st_mode & S_IFMT) {
    			case S_IFBLK:  printf("block device\n");		break;
    			case S_IFCHR:  printf("character device\n");		break;
    			case S_IFDIR:  printf("d\t");			is_directory = 1;	break;
    			case S_IFIFO:  printf("FIFO/pipe\n");			break;
    			case S_IFLNK:  printf("l\t");			is_symlink = 1;		break;
    			case S_IFREG:  printf("f\n");		break;
                            case S_IFREG:  printf("f");           break;
    			case S_IFSOCK: printf("socket\n");			break;
    			default:       printf("unknown?\n");			break;
     
    		        }

    ce code m'affiche le type du fichier .Je veux que le resultat s'affiche dans le fichier crée au debut au lieu que ça soit sur la console .

  6. #6
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par CANADG Voir le message
    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
    struct stat fileStat;                       
    		if(stat(source_name,&fileStat) < 0){
    			perror("error opening the file");
    			return 1;
    		   }                                                        
                         int is_directory = 0;
    		     int is_symlink = 0;
     
    		     // Show the type of file
    		     switch (fileStat.st_mode & S_IFMT) {
    			case S_IFBLK:  printf("block device\n");		break;
    			case S_IFCHR:  printf("character device\n");		break;
    			case S_IFDIR:  printf("d\t");			is_directory = 1;	break;
    			case S_IFIFO:  printf("FIFO/pipe\n");			break;
    			case S_IFLNK:  printf("l\t");			is_symlink = 1;		break;
    			case S_IFREG:  printf("f\n");		break;
                            case S_IFREG:  printf("f");           break;
    			case S_IFSOCK: printf("socket\n");			break;
    			default:       printf("unknown?\n");			break;
     
    		        }
    ce code m'affiche le type du fichier .Je veux que le resultat s'affiche dans le fichier crée au debut au lieu que ça soit sur la console .
    au risque de me répéter printf() ne sert pas à écrire dans un fichier, si tu utilises les appels systèmes c'est write() qu'il faut utiliser, as-tu seulement essayé ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Pour etre franc je sais pas comment le faire.
    Pour lire le contenu d'un fichier j'ai utilisé read() et write() de cette façon là:

    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
    while(nread = read(file, buf, sizeof buf)){
    		if(nread == -1){
    			// We need to close the file descriptors
    			perror("Failed to read from source file");
    			close(file);
    			close(copy);
    			return 1;
    		}
     
    		// Write to the copy
    		ssize_t nwrite = write(copy, buf, nread);
    		if(nwrite == -1){
    			perror("Failed to write to the copy file");
    			break;
    		}
    	}
    et ça m'a donné un bon resultat mais quand il s'agit de la recuperation du type ou size et les autres infos du fichier ...je sais pas comment le faire.J'ai besoin d'un code pour au moins lire et ecrire le type d'un fichier dans un autre fichier si vous pouvez me le fournir.merci d'avance.

  8. #8
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    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
    57
    58
    59
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
     
    #define BUFSIZE 4096
    #define SRCFILE "toto.txt"
    #define DSTFILE "coincoin.txt"
     
    int main (void) {
       int file = open(SRCFILE, O_RDONLY);
       int copy = open(
          DSTFILE,
          O_CREAT | O_WRONLY | O_TRUNC,     /* standard */
          S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH  /* 0644 */
       );
       if (file == -1 || copy == -1) return -1;
     
       int nread;
       ssize_t nwrite;
       char *buf = malloc(BUFSIZE);
       struct stat fileStat;
     
       if(stat(DSTFILE, &fileStat) < 0){
          perror("error opening the file");
          return 1;
       }
     
       // Show the type of file
       switch (fileStat.st_mode & S_IFMT) {
          case S_IFBLK:  write(copy, "block device    \n", 17); break;
          case S_IFCHR:  write(copy, "character device\n", 17); break;
          case S_IFDIR:  write(copy, "directory       \n", 17); break;
          case S_IFIFO:  write(copy, "FIFO/pipe       \n", 17); break;
          case S_IFLNK:  write(copy, "link            \n", 17); break;
          case S_IFREG:  write(copy, "file            \n", 17); break;
          case S_IFSOCK: write(copy, "socket          \n", 17); break;
          default:       write(copy, "unknown?        \n", 17); break;
       }
     
       while ((nread = read(file, buf, BUFSIZE))) {
          if (nread == -1){
             // We need to close the file descriptors
             perror("Failed to read from source file");
             close(file);
             close(copy);
             return 1;
          }
          // Write to the copy
          nwrite = write(copy, buf, nread);
          if (nwrite == -1) {
             perror("Failed to write to the copy file");
             break;
          }
       }
       return 0;
    }
    bonne continuation.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Un tres grand merci pour la reponse ... ça va beaucoup me servir

Discussions similaires

  1. Creer/Ecrire dans un fichier sur un reseau
    Par Psykotik dans le forum MFC
    Réponses: 8
    Dernier message: 03/01/2006, 10h01
  2. [JAR] Lire et Ecrire dans un fichier contenu dans un jar
    Par lipao17 dans le forum Général Java
    Réponses: 5
    Dernier message: 02/05/2005, 12h01
  3. Ecrire dans un fichier
    Par gibet_b dans le forum Linux
    Réponses: 5
    Dernier message: 25/04/2005, 20h11
  4. Ecrire dans un fichier grace à un trigger ?
    Par zigoo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/10/2004, 20h03
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 15h44

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