Bonjour, j'aimerais savoir qu'elle est la différence entre les fonctions open et fopen en général ? (je sais qu'on peut les appliquer toutes les 2 à un fichier)
Bonjour, j'aimerais savoir qu'elle est la différence entre les fonctions open et fopen en général ? (je sais qu'on peut les appliquer toutes les 2 à un fichier)
Je crois qu'il n'yen a pas vraiment. Ca donne le meme résultat mais open renvoie un entier (-1 en cas d'erreur) alors que fopen renvoie le ptr sur le flux.
Donc open s'utilise ainsi :
Et je sais pas si c'est du,a qch, mais je vois tjs open utilisé avec une interface UNIX et non Windows...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int fd ; fd=open(nom,flag,perm);
De plus, pour utiliser open, il faut le header <fcntl.h> sous Unix (pour les constantes flags)
Je laisse les pro completer ou infirmer.
Nas'
En fait avec open tu ouvres un descipteur de fichier (un simple int), alors qu'avec fopen tu ouvres un flux (FILE *) qui contient lui même un descripteur de fichiers. D'ailleurs fopen appelle open si je ne m'abuse. Le fait de faire la séquence open-fdopen permet de savoir exactement comment on a ouvert le fichier (r,w,a,r+,w+,a+,...). Par contre avec fopen on choirit juste lecture, écriture ou lecture-écriture.
Je pense que fopen est plus portable que open non??
Oui car fopen est une fonction standard du langage C, alors que open est une fonction de plus bas niveau (appel système) propre au système Linux/Unix. Et donc oui fopen fait appel à open.Je pense que fopen est plus portable que open non??
C bien ce qu'il me sebmlait que open était une primitive sous unix mais elle est bien implanté sous windows, il doit l'émuler, non ?
fopen -> standard ANSI C, supporté sur toutes les plates-formes
open -> standard POSIX, supporté sous Unix, DOS, Windows
_open, _rtl_open, _dos_open -> fonctions DOS, disponible aussi sous Windows
CreateFile -> fonction Win32
Dans tous les cas, il vaut mieux préférer la fonction la plus portable. Quelques différences néanmoins :
- fopen travaille sur des flux à tampons
- open travaille sans tampon, mais dispose d'un sélecteur texte/binaire sous DOS (pour compatibilité avec un code Unix), par défaut sur texte
- les autres fonctions sont déjà en mode binaire
Je te recommande d'utiliser fopen en premier lieu, ou open sinon. Open est plus adapté pour des traitements de fichiers plus proche du système. Les autres fonctions sont à éviter car elles n'apportent aucun avantage significatif et elles suppriment toute portabilité sur un environnement Unix.
Côté portabilité, ces deux fonctions sont équivalentes car elles tournent sur tous les systèmes actuels et même plus anciens : tous les Unix (Linux, *BSD, Solaris, ...), DOS, Win16, Win32, MAC OS X). J'ignore pour le Mac OS antérieur à la version 10.
Partager