« Programmation C/Entrées/sorties » : différence entre les versions

Contenu supprimé Contenu ajouté
Aucun résumé des modifications
m Formatage, ajout de code
Ligne 87 :
</source>
 
Dissocie le ''flux'' du fichier auquel il avait été associé par <code>fopen</code>. Si le fichier était ouvert en écriture, le tampon est vidé. Cette fonction renvoie 0 si la fermeture s'est bien passée (notamment la purge des zones en écriture), ou <ttcode>EOF</ttcode> en cas d'erreur (voir le paragraphe sur la gestion d'erreurs).
 
=== Suppression ===
Ligne 142 :
</source>
 
Cette fonction purge toutes les zones mémoires en attente d'écriture et renvoie 0 si tout s'est bien passé, ou <ttcode>EOF</ttcode> en cas d'erreur. Si <ttcode>NULL</ttcode> est passé comme argument, tous les flux ouverts en écriture seront purgés.
 
À noter que cette fonction '''ne permet pas''' de purger les flux ouverts en lecture (Pour répondre à une question du genre « Voulez-vous effacer ce fichier (o/n) ? » ). Une instruction de ce genre sera au mieux ignorée, et au pire provoquera un comportement indéterminé :
Ligne 237 :
 
Par défaut, les entiers sont présuposés être de type <code>int</code>, les réels de type <code>double</code> et les chaines de caractères de type <code>char *</code>. Il arrive toutefois que les types soient plus grands (et non plus petits à cause de la '''promotion des types''', c.f. paragraphes [[Programmation C Opérateurs#Promotion|opérateurs]] et [[Programmation C Fonctions et procédures#Accès aux arguments|fonction à nombre variable d'arguments]]), le spécificateur de format permet donc d'indiquer la taille de l'objet en ajoutant les attributs suivants ''avant'' le caractère de conversion :
* hh : indique que l'entier est un <ttcode>[un]signed char</ttcode> au lieu d'un <ttcode>[unsigned] int</ttcode> ;
* h : indique que l'entier est de type <ttcode>[unsigned] short</ttcode> au lieu d'un <ttcode>[unsigned] int</ttcode> ;
* l : pour les entiers, le type attendu ne sera plus <code>int</code> mais <code>long int</code> et pour les chaines de caractères, il sera de type <code>wchar_t *</code> (c.f section [[Programmation C/Chaînes de caractères|chaînes de caractères]]).
* ll : cet attribut ne concerne que les types entiers, où le type attendu sera <code>long long int</code>.
Ligne 267 :
|}
 
<ttcode>hh</ttcode> et <ttcode>ll</ttcode> sont des nouveautés de C99. On notera qu'avec l'attribut <ttcode>hh</ttcode> et les formats <ttcode>n</ttcode>, <ttcode>d</ttcode>, <ttcode>i</ttcode>, <ttcode>o</ttcode>, <ttcode>x</ttcode> ou <ttcode>X</ttcode>, le type est <ttcode>signed char</ttcode> et non <ttcode>char</ttcode>. En effet, comme vu dans le chapitre [[Programmation C/Types de base|Types de base]], le type <ttcode>char</ttcode> peut être signé ou non, suivant l'implémentation. Ici, on est sûr de manipuler le type caractère signé.
 
Quelques exemples :