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 :

différence entre open fopen


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 40
    Par défaut différence entre open fopen
    Bonsoir je voudrais savoir la différence entre fopen open , read fread ....
    je sais que fread est utilisé seulement pour les fichiers binaire et elle sert a lire les donnes d'un fichier (si je ne me trompe pas )

    si quelqu'un pourrait m'éclaircir sa merci d'avance

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 070
    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 070
    Billets dans le blog
    144
    Par défaut
    Bonjour,

    N'oubliez pas de consulter les pages de documentation officielle lorsque vous avez une telle question (par exemple, dans un terminal linux, ou sur Google : man fread).
    Pour fread, vous avez raison. Toutefois, pour fopen/open la différence est bien moins claire (et c'est normal)
    fopen travaille (retourne) une structure FILE alors que open retourne un descripteur de fichier, sous la forme d'un int.
    En réalité, la structure FILE contient un entier, qui est le descripteur de fichier, et en réalité, si vous lisez la documentation, vous verre que fopen appelle open.
    Du coup, qu'est ce qui fait qu'ils sont différents : la norme. fopen est la fonction, définie par la norme POSIX (pour ouvrir des fichiers), alors que open est une fonction exposée par le noyau lui même. Du coup, open est légèrement plus bas niveau (plus proche du noyau). En effet, on peut imaginer que fopen() réalise un peu plus que la simple ouverture du fichier avec open.
    D'ailleurs, on pourrait s'amuser à faire deux programmes, un avec open et l'autre avec fopen et faire un strace dessus (pour avoir la trace des appels systèmes).
    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.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 815
    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 815
    Billets dans le blog
    1
    Par défaut
    Bonjour
    fopen/fclose/fread/fwrite/fgets/fputs/fgetc/fputc/fscanf/fprintf/ftell/fseek sont des fonctions standard de la libC. On les nomme généralement "fonctions de haut niveau" car elles bufferisent les IO (tu demandes 1c l'OS en charge 100000 dans un buffer puis t'en donne 1 et ensuite les demandes suivantes sont faites depuis le buffer). Et il y a un tas de fonctions dédiées à la lecture et l'écriture.

    open/close/read/write/tell/seek sont des fonctions POSIX. Elles ne sont disponibles que dans le monde Unix/Linux. Les IO ne sont pas bufferisées (enfin il y a quand-même le buffer disque qui joue mais ça c'est physique) ce qui leur vaut cette appellation de "fonctions de bas niveau". Et il n'y a qu'une fonction pour la lecture et qu'une pour lécriture.

    Citation Envoyé par Marwaa45 Voir le message
    je sais que fread est utilisé seulement pour les fichiers binaire
    Absolument pas. C'est vrai que fread se prête bien à la lecture de fichiers structurés d'une certaine façon, ce qui fait qu'on l'utilise plus spécifiquement dans ces cas là ; mais on peut l'utiliser pour tout fichier quel qu'il soit. D'ailleurs peux-tu me donner la différence entre "fichier binaire" et "fichier non binaire" ?

    Citation Envoyé par Marwaa45 Voir le message
    et elle sert a lire les donnes d'un fichier (si je ne me trompe pas )
    Ah oui. Comme toutes les autres fonctions de lecture qui servent elles-aussi à lire les données d'un fichier. Et (déduction es-tu là?), les fonctions d'écriture servent à...?
    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]

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    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 393
    Par défaut
    Bonjour,
    • fopen() est la fonction définie par la norme ANSI C originelle, ainsi que toutes les normes ISO C qui ont suivi. Cela signifie qu'elle est censée être disponible sur n'importe quelle plate-forme qui supporte le langage C. Par contre, elle ne fait généralement pas partie du système d'exploitation lui-même: Elle ne fait qu'appeler la fonction d'ouverture de fichier fournie par le système d'exploitation.
    • open() est la fonction d'ouverture de fichier exposée par les systèmes d'exploitation de la famille UNIX. Sur tous ces systèmes, on peut choisir de l'appeler directement à la place de fopen(), au prix de la compatibilité avec les plate-formes non-unixoïdes (ou plus précisément, les plate-formes qui ne supportent pas la norme POSIX)


    fread() et read() sont les fonctions respectivement liées à fopen() et open(), et servent toutes les deux à lire des données avec une taille fixe plutôt que des données délimitées par des caractères d'espacement (fscanf() ou de fin de ligne (fgets()). C'est une des distinctions possibles entre les termes vagues "fichier binaire" et "fichier texte".

    Une autre distinction possible entre "fichier binaire" et "fichier texte", c'est le "mode d'ouverture" du fichier, qui décide si les fonctions de lecture et écriture (y compris celles à bas niveau) traduisent automatiquement les fins de ligne entre "fin de ligne spécifique à la plate-forme" ("\n" sous UNIX, "\r" sous les vieux Mac, "\r\n" sous DOS et Windows) et "fin de ligne C" ("\n" partout). Vu que cela peut changer la taille des données au moment où elles sont lues, c'est une très mauvaise idée d'utiliser fread() ou read() sur un fichier ouvert en "mode texte"!
    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. Réponses: 3
    Dernier message: 11/09/2014, 12h47
  2. différence entre open et refresh
    Par rvzip64 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/10/2008, 10h57
  3. différences entre SQLquery.open active ExecSQL
    Par Ice-tea dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/06/2006, 16h13
  4. fopen -> différences entres les types d'ouvertur
    Par Patrick PETIT dans le forum C
    Réponses: 10
    Dernier message: 01/06/2003, 18h19
  5. Réponses: 5
    Dernier message: 11/12/2002, 12h31

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