Compare commits

...

4 Commits

Author SHA1 Message Date
tth
b04f51b032 more bla in C chapter 2021-09-27 00:57:38 +02:00
tth
b7af954be6 bla 2021-09-24 12:21:31 +02:00
tth
0d88b1a694 more bla 2021-09-22 13:17:46 +02:00
tth
01a177cae9 limiter profondeur table des matières 2021-09-18 10:20:29 +02:00
4 changed files with 89 additions and 16 deletions

View File

@ -95,6 +95,8 @@ Nous avons vu brièvement dans la première section de ce chapitre
la fonction \texttt{main} et ses deux paramètres. la fonction \texttt{main} et ses deux paramètres.
Il est temps de préciser les détails. Il est temps de préciser les détails.
XXX\index{XXX}
% --------------------------------------------------------- % ---------------------------------------------------------
\section{Entrées / Sorties} \section{Entrées / Sorties}
@ -125,6 +127,20 @@ et afficher un caractère dans \texttt{stdout}. Tout cela semble
très bien, mais la fonction de lecture est piégeuse très bien, mais la fonction de lecture est piégeuse
"\textsc{It's a trap}", comme nous allons bientôt le voir. "\textsc{It's a trap}", comme nous allons bientôt le voir.
Vous devez logiquement penser que si nous allons lire un caractère
depuis l'entrée du programme, nous pouvons utiliser une variable de
type \texttt{char}, puisque ce type est prévu pour stocker un
caractère. Seulement, pour indiquer l'abscence de caractère,
la fin du fichier, il nous faut une valeur \textsl{out of band}
et donc getchar renvoit en fait un \texttt{int} dont une valeur
particulière sera nommée \texttt{EOF}, \textsl{end of file}.
\begin{verbatim}
while (EOF != (foo=getchar())) { ....
\end{verbatim}
Voilà un piège éliminé, et vous trouverez un exemple complet
un peu plus loin.
\subsection{Écrire : \texttt{printf}} \subsection{Écrire : \texttt{printf}}
\index{printf} \index{printf}
@ -147,20 +163,70 @@ Le premier de ces paramêtres, \texttt{"foo = \%d\textbackslash{}n"},
est appelé \emph{chaine de format}. C'est une chaine de caractères est appelé \emph{chaine de format}. C'est une chaine de caractères
que l'on peut classer en trois catégories~: que l'on peut classer en trois catégories~:
\textsl{caractères crus} : ils sont directements poussés vers la sortie. \begin{itemize}
\textsl{codes de format} : les fragments qui commencent par le \item{\textsl{caractères crus} : ils sont directements poussés vers
caractère '\%'. la sortie. La plupart d'entre eux donnent le résultat attendu.}
\textsl{échappements} : les caratères précédés d'un \item{\textsl{codes de format} : les fragments qui commencent par le
'\textbackslash'. caractère '\%'. Ils servent à contrôler l'apparence de ce qui va
suivre. Par exemple \texttt{\%x} va afficher un int en hexadécimal}
\item{\textsl{échappements} : les caractères précédés d'un
'\textbackslash' ou \textsl{backslash}\footnote{barre-penchée-du-8}
permettent d'inclure dans la chaine de format des caractères
non imprimables.
Par exemple, \texttt{'\textbackslash{}n'} va générer le caractère
\textsl{newline} qui marque la fin d'une ligne de texte.
}
\end{itemize}
\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 ?
Alors les subtilités de scanf vont vous plaire.
\textit{To be continued...}
\subsection{Les fichiers}\index{fopen}\index{fclose}
Lire et écrire depuis les flux gérés par le système, c'est bien, mais
c'est mieux de pouvoir faire la même chose depuis ou vers un fichier
enregistré. Il nous faut un moyen pour se 'connecter' à un ficher, et
y balancer des trucs à grand coup de printf.
Ce mécanisme passe par la fonction \texttt{fopen} et \texttt{fclose}.
La première va nous renvoyer (si tout se passe bien) un pointeur
sur une structure opaque de type \texttt{FILE *} qui pourra être
utilisé dans la suite des opérations. Voici son prototype~:
\begin{verbatim}
#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
\end{verbatim}
Le premier paramêtre est le nom du fichier concerné, possiblement avec
son chemin d'accès (absolu ou relatif), comme \texttt{"foo.fimg"},
\texttt{"/var/tmp/foo.data"} ou \texttt{"./bla.txt"}.
Le second est le mode d'accès à ce fichier. Ce mode précise, entre
autres, si nous souhaitons lire ou écrire dans ce fichier.
La valeur retournée par cette fonction est un pointeur qui peut
être égal à \texttt{NULL} en cas d'erreur~: par exemple le fichier
n'existe pas ou ne peut pas être crée.
Notre fichier est maintenant ouvert, la fonction \texttt{fprintf} va
nous permettre d'écrire quelque chose dedans. Elle est analogue au
\texttt{prinf} vu un peu plus tôt, sauf qu'elle demande un
argument supplémentaire, et c'est justement le pointeur retourné
par \texttt{fopen}~:
\begin{verbatim}
int fprintf(FILE *stream, const char *format, ...);
\end{verbatim}
% --------------------------------------------------------- % ---------------------------------------------------------
@ -189,8 +255,8 @@ $
\end{verbatim} \end{verbatim}
Pour une explication plus détaillée sur les mécanismes Pour une explication plus détaillée sur les mécanismes
utilisés et les usages possibles, utilisés et les usages possibles d'un tel filtre,
il faut voir le concept de pipeline en il faut voir le concept de pipeline du shell en
page \pageref{pipeline}. page \pageref{pipeline}.
% --------------------------------------------------------- % ---------------------------------------------------------
@ -351,7 +417,7 @@ divers comme Open Sound Control (page \pageref{chap:OSC}) ou
libsndfile (page \pageref{chap:son}). libsndfile (page \pageref{chap:son}).
Et pour les gens du système~: Et pour les gens du système~:
l'utilisation des signaux (page \pageref{get-signal}), l'utilisation des signaux (page \pageref{get-signal}),
le chargement dynamique (page \pageref{ex_dlopen}. le chargement dynamique (page \pageref{ex_dlopen}).
% --------------------------------------------------------- % ---------------------------------------------------------

View File

@ -34,6 +34,8 @@ keyb fr
\section{Fractint} \section{Fractint}
La première chose qu'il faudrait regarder, c'est les options de la
ligne de commande, pour pouvoir batcher des animations\dots
% ---------------------------------------------------------- % ----------------------------------------------------------

View File

@ -1,6 +1,6 @@
\chapter{Graphisme} \chapter{Graphisme}
Quelques notes en vrac. Quelques notes en vrac sur divers logiciels\dots
% ------------------------------------------------ % ------------------------------------------------
@ -40,7 +40,8 @@ lors du calcul de la séquence~:
#fclose CL #fclose CL
\end{verbatim} \end{verbatim}
Et la seconde, l'exploitation des données~: Et la seconde, l'exploitation, ou plutôt la visualisation
des données~:
\begin{verbatim} \begin{verbatim}
#!/bin/bash #!/bin/bash
@ -48,9 +49,7 @@ Et la seconde, l'exploitation des données~:
FILE="cam.log" FILE="cam.log"
TMPF="/dev/shm/cam.data" TMPF="/dev/shm/cam.data"
IMAGE="graphe.png" IMAGE="graphe.png"
tail -360 ${FILE} | sort -n > ${TMPF}
tail -360 $FILE | sort -n > $TMPF
gnuplot << __EOC__ gnuplot << __EOC__
set term png size 720,720 set term png size 720,720
set output "${IMAGE}" set output "${IMAGE}"
@ -58,13 +57,18 @@ set ytics 2
set xtics 2 set xtics 2
set grid front set grid front
set title "Rush Camera" set title "Rush Camera"
plot "$TMPF" using 2:4 title "Cam", \ plot "${TMPF}" using 2:4 title "Cam", \
"$TMPF" using 5:7 title "Lat" with dots "${TMPF}" using 5:7 title "Lat" with dots
__EOC__ __EOC__
display "${IMAGE}" & display "${IMAGE}" &
\end{verbatim} \end{verbatim}
Dans ce cas, il s'agit d'une animation de 360 images, ce qui explique
la commande\texttt{tail} au début du script. Ensuite les deux clauses
\textsl{using 2:4 / 5:7} permettent de sélectionner les deux
coordonnées X et Z, dans le repère POVray, qui n'est pas le même que
celui de Gnuplot.
% ------------------------------------------------ % ------------------------------------------------

View File

@ -20,6 +20,7 @@
\lstset{basicstyle=\ttfamily\small} \lstset{basicstyle=\ttfamily\small}
\lstset{aboveskip=1em,belowskip=1em} \lstset{aboveskip=1em,belowskip=1em}
\setcounter{tocdepth}{1}
\usepackage{pifont} % caractères rigolos \usepackage{pifont} % caractères rigolos
\usepackage{enumitem} \usepackage{enumitem}