GETS(3)

NOM
gets, fgetc, fgets, getc, getchar, ungetc - Saisie de caractères et de chaînes

SYNOPSIS
#include <stdio.h>

int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int getchar(void);
char *gets(char *s);
int ungetc(int c, FILE *stream);

DESCRIPTION
fgetc() lit le caractère suivant depuis le flux stream et le renvoie sous forme d'un unsigned char, transformé en int, ou EOF en cas d'erreur ou de fin de fichier.

getc() est équivalent à fgetc() sauf qu'il peut être implémenté sous forme de macro, qui évalue l'argument stream plusieurs fois.

getchar() est équivalent à getc(stdin).

gets() lit une ligne depuis stdin et la place dans le tampon pointé par s jusqu'à atteindre un retour chariot, ou EOF, qu'il remplace par un octet nul (« \0 »). Il n'y a pas de vérification de débordement de tampon (voir la section des BOGUES plus bas).

fgets() lit au plus size - 1 caractères depuis stream et les place dans le tampon pointé par s. La lecture s'arrête après EOF ou un retour chariot. Si un retour chariot (newline) est lu, il est placé dans le tampon. Un octet nul (« \0 ») final est placé à la fin de la ligne.

ungetc() replace le caractère c dans le flux stream, en le transformant en unsigned char, où il sera disponible pour une lecture ultérieure. Les caractères replacés seront renvoyés en ordre inverse. Le fonctionnement n'est garanti que pour le replacement d'un seul caractère.

Les fonctions décrites ci-dessus peuvent être utilisées conjointement, ainsi qu'avec les autres fonctions de lecture de la bibliothèque stdio.

Pour des versions de ces fonctions ignorant les verrouillages, voir unlocked_stdio(3).

VALEUR RENVOYÉE
fgetc(), getc() et getchar() renvoient un caractère, lu comme un unsigned char, et transformé en int, ou EOF à la fin du fichier, ou en cas d'erreur.

gets() et fgets() renvoient le pointeur s si elles réussissent, et NULL en cas d'erreur, ou si la fin de fichier est atteinte avant d'avoir pu lire au moins un caractère.

ungetc() renvoie c s'il réussit, ou EOF en cas d'erreur.

CONFORMITÉ
C89, C99, POSIX.1-2001. LSB déconseille l'utilisation de gets(). POSIX.1-2008 marque gets() comme étant obsolète. ISO C11 retire la specification de gets() du langage C et, depuis la version 2.16, les fichiers d'en-tête glibc n'exposent pas la déclaration de fonction si la macro de test de fonctionnalités _ISOC11_SOURCE est définie.

BOGUES
N'utilisez jamais gets(). Comme il est impossible de savoir à l'avance combien de caractères seront lus par gets(), et comme celui-ci écrira tous les caractères lus, même s'ils débordent du tampon, cette fonction est extrêmement dangereuse à utiliser. On a déjà utilisé ce dysfonctionnement pour créer des trous de sécurité. UTILISEZ TOUJOURS fgets() À LA PLACE DE gets().

Il est fortement déconseillé de mélanger les appels aux fonctions de lecture de la bibliothèque stdio avec les appels aux fonctions de lecture bas-niveau read(2) sur le descripteur de fichier associé au flux. Les résultats sont indéfinis, et très probablement indésirables.

VOIR AUSSI
read(2), write(2), ferror(3), fgetwc(3), fgetws(3), fopen(3), fread(3), fseek(3), getline(3), getwchar(3), puts(3), scanf(3), ungetwc(3), unlocked_stdio(3), feature_test_macros(7)

COLOPHON
Cette page fait partie de la publication 3.40 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <URL:http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <URL:http://perkamon.alioth.debian.org/>.

Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».