Compare commits
4 Commits
0ad7108d5a
...
b04f51b032
Author | SHA1 | Date | |
---|---|---|---|
|
b04f51b032 | ||
|
b7af954be6 | ||
|
0d88b1a694 | ||
|
01a177cae9 |
82
chap/C.tex
82
chap/C.tex
@ -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}).
|
||||||
|
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% ---------------------------------------------------------
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
% ----------------------------------------------------------
|
% ----------------------------------------------------------
|
||||||
|
@ -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.
|
||||||
|
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
|
||||||
|
1
main.tex
1
main.tex
@ -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}
|
||||||
|
Loading…
Reference in New Issue
Block a user