Compare commits
No commits in common. "b04f51b0323188c238a1d35efb8468e0d4834180" and "0ad7108d5aa0191ff5a078d993d9614d677afd2e" have entirely different histories.
b04f51b032
...
0ad7108d5a
82
chap/C.tex
82
chap/C.tex
@ -95,8 +95,6 @@ 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}
|
||||||
@ -127,20 +125,6 @@ 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}
|
||||||
@ -163,70 +147,20 @@ 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~:
|
||||||
|
|
||||||
\begin{itemize}
|
\textsl{caractères crus} : ils sont directements poussés vers la sortie.
|
||||||
|
|
||||||
\item{\textsl{caractères crus} : ils sont directements poussés vers
|
\textsl{codes de format} : les fragments qui commencent par le
|
||||||
la sortie. La plupart d'entre eux donnent le résultat attendu.}
|
caractère '\%'.
|
||||||
|
|
||||||
\item{\textsl{codes de format} : les fragments qui commencent par le
|
\textsl{échappements} : les caratères précédés d'un
|
||||||
caractère '\%'. Ils servent à contrôler l'apparence de ce qui va
|
'\textbackslash'.
|
||||||
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}
|
|
||||||
|
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% ---------------------------------------------------------
|
||||||
|
|
||||||
@ -255,8 +189,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 d'un tel filtre,
|
utilisés et les usages possibles,
|
||||||
il faut voir le concept de pipeline du shell en
|
il faut voir le concept de pipeline en
|
||||||
page \pageref{pipeline}.
|
page \pageref{pipeline}.
|
||||||
|
|
||||||
% ---------------------------------------------------------
|
% ---------------------------------------------------------
|
||||||
@ -417,7 +351,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,8 +34,6 @@ 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 sur divers logiciels\dots
|
Quelques notes en vrac.
|
||||||
|
|
||||||
% ------------------------------------------------
|
% ------------------------------------------------
|
||||||
|
|
||||||
@ -40,8 +40,7 @@ lors du calcul de la séquence~:
|
|||||||
#fclose CL
|
#fclose CL
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Et la seconde, l'exploitation, ou plutôt la visualisation
|
Et la seconde, l'exploitation des données~:
|
||||||
des données~:
|
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
@ -49,7 +48,9 @@ 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}"
|
||||||
@ -57,18 +58,13 @@ 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,7 +20,6 @@
|
|||||||
\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