talking about fgets
This commit is contained in:
parent
8ba88d2b8d
commit
a1f8b096e3
48
chap/C.tex
48
chap/C.tex
@ -163,7 +163,8 @@ un peu plus loin.
|
|||||||
La fonction \texttt{printf} permet d'afficher sur la sortie
|
La fonction \texttt{printf} permet d'afficher sur la sortie
|
||||||
standard le contenu d'une (ou plusieurs)
|
standard le contenu d'une (ou plusieurs)
|
||||||
variable sous diverses présentations,
|
variable sous diverses présentations,
|
||||||
qui sont contrôlables par un tout petit DSL\index{DSL}~:
|
qui sont contrôlables par un tout petit
|
||||||
|
DSL\footnote{\textsl{domain specific language}}\index{DSL}~:
|
||||||
la chaine de format.
|
la chaine de format.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
@ -217,18 +218,61 @@ for (foo=0; foo<1000; foo++) {
|
|||||||
}
|
}
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
% ---------------------------------------------------------
|
||||||
|
%
|
||||||
|
% voir aussi ~/code/network/README.md
|
||||||
|
%
|
||||||
|
\subsection{Lire : \texttt{fgets}}
|
||||||
|
\index{fgets}
|
||||||
|
|
||||||
|
Cette fonction a pour but de lire une ligne de texte depuis
|
||||||
|
une entrée (stdin, fichier, socket\index{socket}...)
|
||||||
|
et de la ranger en mémoire.
|
||||||
|
Mais commençons par lire la documentation\index{RTFM} de cette fonction,
|
||||||
|
en nous concentrant sur ces deux passages, avant de passer à
|
||||||
|
un exemple\footnote{encore en phase de méditation}.
|
||||||
|
|
||||||
|
Voici deux extraits de ce que nous affirme la page du manuel~:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
DESCRIPTION
|
||||||
|
fgets() reads in at most one less than size characters from stream and
|
||||||
|
stores them into the buffer pointed to by s. Reading stops after an
|
||||||
|
EOF or a newline. If a newline is read, it is stored into the buffer.
|
||||||
|
A terminating null byte ('\0') is stored after the last character in
|
||||||
|
the buffer.
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
fgets() returns s on success, and NULL on error or when end of file oc‐
|
||||||
|
curs while no characters have been read.
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Prenez le temps d'y réfléchir, et essayons un cas simple d'utilisation
|
||||||
|
pour examiner le comportement de cette fonction. Nous allons
|
||||||
|
boucler sur la lecture d'une ligne depuis l'entrée standard dans
|
||||||
|
un buffer d'une taille fixée, puis afficher le nombre de caractères
|
||||||
|
que nous avons reçus.
|
||||||
|
|
||||||
|
\lstinputlisting[language=c]{code/C/fgets-simple.c}
|
||||||
|
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% ---------------------------------------------------------
|
||||||
|
%
|
||||||
|
%
|
||||||
|
|
||||||
\subsection{Lire : \texttt{scanf}}
|
\subsection{Lire : \texttt{scanf}}
|
||||||
\index{scanf}
|
\index{scanf}
|
||||||
|
|
||||||
Avez-vous bien révisé la section qui cause des pointeurs ?
|
Avez-vous bien révisé la section qui cause des pointeurs ?
|
||||||
Êtes-vous prèt à d'étranges comportements ?
|
Êtes-vous prèt à d'étranges comportements ?
|
||||||
Alors les subtilités de scanf vont vous plaire.
|
À ne plus savoir où peut être la tête de lecture ?
|
||||||
|
Alors les subtilités de \texttt{scanf} vont vous plaire.
|
||||||
|
|
||||||
\textit{To be continued...}
|
\textit{To be continued...}
|
||||||
|
|
||||||
|
% ---------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
\subsection{Les fichiers}\index{fopen}\index{fclose}
|
\subsection{Les fichiers}\index{fopen}\index{fclose}
|
||||||
|
|
||||||
Lire et écrire depuis les flux gérés par le système, c'est bien, mais
|
Lire et écrire depuis les flux gérés par le système, c'est bien, mais
|
||||||
|
1
code/C/.gitignore
vendored
Normal file
1
code/C/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
fgets-simple
|
@ -8,3 +8,6 @@ no-op: no-op.c Makefile
|
|||||||
slowprint: slowprint.c Makefile
|
slowprint: slowprint.c Makefile
|
||||||
gcc -Wall $< -o $@
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
|
fgets-simple: fgets-simple.c Makefile
|
||||||
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
|
14
code/C/fgets-simple.c
Normal file
14
code/C/fgets-simple.c
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* exemple utilisation 'fgets'
|
||||||
|
*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#define TL 8
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
char buffer[TL+1];
|
||||||
|
while( fgets(buffer, TL, stdin) ) {
|
||||||
|
printf(" %4ld\n", strlen(buffer));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user