Compare commits
No commits in common. "c6fe2224bfc9261f30f9752886c6c2fd7cc0b9e8" and "9d08631b32eff42d9622eaf4ea66a81ccbac16ef" have entirely different histories.
c6fe2224bf
...
9d08631b32
66
chap/C.tex
66
chap/C.tex
@ -479,9 +479,9 @@ avec les variables locales. Il est temps de passer à une gestion
|
|||||||
explicite de celle-ci~:
|
explicite de celle-ci~:
|
||||||
les fonctions \texttt{malloc} et \texttt{free} sont là pour ça.
|
les fonctions \texttt{malloc} et \texttt{free} sont là pour ça.
|
||||||
|
|
||||||
La première fonction demande au mc/p de nous préter une certaine quantité
|
La première demande au mc/p de nous préter une certaine quantité
|
||||||
de mémoire, que nous pourront utiliser à notre guise.
|
de mémoire, que nous pourront utiliser à notre guise.
|
||||||
Et la seconde restitue cette zone mémoire au système sous-jacent.
|
Et la seconde restitue la zone mémoire au système sous-jacent.
|
||||||
|
|
||||||
Un rapide synopsis minimal d'utilisation~:
|
Un rapide synopsis minimal d'utilisation~:
|
||||||
|
|
||||||
@ -536,72 +536,10 @@ extern int optind, opterr, optopt;
|
|||||||
La page de man de getopt(3) contient des explications détaillées
|
La page de man de getopt(3) contient des explications détaillées
|
||||||
et un exemple simple d'utilisation.
|
et un exemple simple d'utilisation.
|
||||||
|
|
||||||
% =========================================================
|
|
||||||
% Sun Sep 3 05:48:37 UTC 2023
|
|
||||||
%
|
|
||||||
%
|
|
||||||
\section{Analyser une ligne de texte} \index{parser}
|
|
||||||
|
|
||||||
Nous désirons implémenter une interface en ligne de commande
|
|
||||||
(aka CLI\index{CLI}) pour un enchainement simple d'intructions
|
|
||||||
assez semblables. On peut aussi voir ça comme la création
|
|
||||||
d'un \textsl{domain specific language} (aka DSL\index{DSL}).
|
|
||||||
|
|
||||||
Pour être cohérent avec le shell, nous allons utiliser la
|
|
||||||
même méthode de séparation des mots sur la ligne à
|
|
||||||
décomposer~:
|
|
||||||
utiliser une liste pré-définie de séparateur de champs,
|
|
||||||
comme le \$IFS du shell.
|
|
||||||
|
|
||||||
\subsection{la fonction \texttt{strtok}} \index{strtok}
|
|
||||||
|
|
||||||
Cette fonction nous permet de « découper » notre ligne de commande
|
|
||||||
en \textsl{tokens} par un ensemble de
|
|
||||||
caractères de séparation appelé \texttt{delim} dans cet extrait
|
|
||||||
du man\index{man}.
|
|
||||||
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
#include <string.h>
|
|
||||||
char *strtok(char *str, const char *delim);
|
|
||||||
|
|
||||||
The strtok() function breaks a string into a sequence of zero or more
|
|
||||||
nonempty tokens. On the first call to strtok(), the string to be
|
|
||||||
parsed should be specified in str. In each subsequent call that should
|
|
||||||
parse the same string, str must be NULL.
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
Concrètement, nous allons utiliser deux séparateurs très classiques,
|
|
||||||
l'espace et la tabulation \texttt{ delim = "\symbol{92}t ";}.
|
|
||||||
on peut ensuite aller regarder dans la mémoire ce qui s'y passe~:
|
|
||||||
|
|
||||||
\begin{verbatim}
|
|
||||||
--- chaine d'origine
|
|
||||||
66 6f 6f 20 20 20 62 61 72 09 71 75 75 78 20 77 69 7a 00
|
|
||||||
f o o b a r q u u x w i z
|
|
||||||
--- 1er strtok
|
|
||||||
66 6f 6f 00 20 20 62 61 72 09 71 75 75 78 20 77 69 7a 00
|
|
||||||
f o o b a r q u u x w i z
|
|
||||||
got [foo]
|
|
||||||
\end{verbatim}
|
|
||||||
|
|
||||||
Déja on peut constater que la chaine de départ est modifiée, ce qui
|
|
||||||
risque de causer des soucis, mais on en parlera plus tard.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Le programme complet}
|
|
||||||
|
|
||||||
\lstinputlisting[language=c]{code/C/demo-strtok.c}
|
|
||||||
|
|
||||||
% =========================================================
|
% =========================================================
|
||||||
|
|
||||||
\section{Erreurs classiques}
|
\section{Erreurs classiques}
|
||||||
|
|
||||||
Le C est un langage parsemé de fosses, de chausse-trapes et de
|
|
||||||
pièges fourbes et sournois. Sans parler des UBs, hein\dots
|
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item{Variables non initialisées.}
|
\item{Variables non initialisées.}
|
||||||
|
|
||||||
|
18
chap/OSC.tex
18
chap/OSC.tex
@ -16,8 +16,6 @@ qui reste simple
|
|||||||
Cette bibliothèque est livrée avec deux outils que nous
|
Cette bibliothèque est livrée avec deux outils que nous
|
||||||
allons voir maintenant.
|
allons voir maintenant.
|
||||||
|
|
||||||
% ================================================================
|
|
||||||
|
|
||||||
\section{oscdump \& oscsend}
|
\section{oscdump \& oscsend}
|
||||||
\index{oscdump}\index{oscsend}
|
\index{oscdump}\index{oscsend}
|
||||||
|
|
||||||
@ -45,7 +43,7 @@ tth@debian:~$ oscdump 1664
|
|||||||
tth@debian:~$
|
tth@debian:~$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
% ================================================================
|
% ------------------------------------------------
|
||||||
|
|
||||||
\section{Exemple de code}
|
\section{Exemple de code}
|
||||||
|
|
||||||
@ -69,8 +67,7 @@ Cette partie là est beaucoup plus simple.
|
|||||||
J'avoue ne pas encore savoir ce que veut bien dire la
|
J'avoue ne pas encore savoir ce que veut bien dire la
|
||||||
valeur de retour.
|
valeur de retour.
|
||||||
|
|
||||||
% ================================================================
|
% ------------------------------------------------
|
||||||
|
|
||||||
\section{En Perl} \index{Perl}
|
\section{En Perl} \index{Perl}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
@ -83,15 +80,7 @@ or die "Could not start client: $@\n";
|
|||||||
$client->send(['/proc/kcore', 'i', 61, 's', "bla"]);
|
$client->send(['/proc/kcore', 'i', 61, 's', "bla"]);
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
% ================================================================
|
% ------------------------------------------------
|
||||||
% nouveau: Sat Jul 15 07:14:10 UTC 2023
|
|
||||||
|
|
||||||
\section{Le routage}
|
|
||||||
|
|
||||||
WIP...\index{XXX}
|
|
||||||
|
|
||||||
|
|
||||||
% ================================================================
|
|
||||||
|
|
||||||
\section{Autres logiciels}
|
\section{Autres logiciels}
|
||||||
|
|
||||||
@ -101,5 +90,4 @@ Processing\index{Processing},
|
|||||||
Chuck\index{Chuck} (page \pageref{chuck-osc}),
|
Chuck\index{Chuck} (page \pageref{chuck-osc}),
|
||||||
\dots
|
\dots
|
||||||
|
|
||||||
% ================================================================
|
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ le graphique. Il ne nécessite pas de système d'exploitation.
|
|||||||
\section{Configuration}
|
\section{Configuration}
|
||||||
|
|
||||||
La configuration de Dosbox est par défaut dans le fichier
|
La configuration de Dosbox est par défaut dans le fichier
|
||||||
\texttt{\$HOME/.dosbox/dosbox-0.74-2.conf}. Vous remarquerez
|
\texttt{~/.dosbox/dosbox-0.74-2.conf}. Vous remarquerez
|
||||||
que le numéro de version est \textbf{dans} le nom de
|
que le numéro de version est \textbf{dans} le nom de
|
||||||
ce fichier. Ce fichier est abondamment commenté.
|
ce fichier. Ce fichier est abondamment commenté.
|
||||||
|
|
||||||
|
@ -78,8 +78,6 @@ Je demande à voir\footnote{Parce que c'est écrit par LP ?}.
|
|||||||
\section{Translation d'adresse}
|
\section{Translation d'adresse}
|
||||||
\index{NAT}
|
\index{NAT}
|
||||||
|
|
||||||
% XXX expliquer un peu le NAT !
|
|
||||||
|
|
||||||
Voir en page \pageref{NAT} pour découvrir comment utiliser une
|
Voir en page \pageref{NAT} pour découvrir comment utiliser une
|
||||||
machine connectée en WiFi pour donner accès à Internet à votre
|
machine connectée en WiFi pour donner accès à Internet à votre
|
||||||
réseau local Ethernet\dots
|
réseau local Ethernet\dots
|
||||||
@ -89,7 +87,7 @@ défis à relever pour en faire une solution complexe et
|
|||||||
amusante à des problèmes inexistants et datant du siècle
|
amusante à des problèmes inexistants et datant du siècle
|
||||||
dernier.
|
dernier.
|
||||||
Par exemple la comparaison de la mise en œuvre du NAT
|
Par exemple la comparaison de la mise en œuvre du NAT
|
||||||
avec \texttt{iptables} et \texttt{pfctl} est une source de trolls
|
avec \texttt{iptable} et \texttt{pfctl} est une source de trolls
|
||||||
sans fin.
|
sans fin.
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,9 +48,6 @@ ou une playlistde fichiers \texttt{.ogg}\index{ogg}.
|
|||||||
\textsl{more to come...}
|
\textsl{more to come...}
|
||||||
|
|
||||||
%-------------------------------------------------------------
|
%-------------------------------------------------------------
|
||||||
|
|
||||||
% https://github.com/radiofrance/rf-liquidsoap
|
|
||||||
|
|
||||||
\section{liquidsoap}
|
\section{liquidsoap}
|
||||||
\index{liquidsoap}
|
\index{liquidsoap}
|
||||||
|
|
||||||
|
@ -132,10 +132,6 @@ ffmpeg -nostdin \
|
|||||||
wip.mp4
|
wip.mp4
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
OMFG! Il manque le son.
|
|
||||||
|
|
||||||
% -----------------------------------------------------------------
|
|
||||||
|
|
||||||
\subsection{Questions}
|
\subsection{Questions}
|
||||||
|
|
||||||
Comment convertir lors de l'encodage un fichier \texttt{.WAV}
|
Comment convertir lors de l'encodage un fichier \texttt{.WAV}
|
||||||
@ -156,10 +152,9 @@ ffmpeg -f x11grab -video\_size cif -framerate 25 -i :0.0 /tmp/out.mpg
|
|||||||
\section{VLC} \index{vlc}
|
\section{VLC} \index{vlc}
|
||||||
|
|
||||||
VLC est un peu le couteau suisse à 112 lames du multimédia.
|
VLC est un peu le couteau suisse à 112 lames du multimédia.
|
||||||
Son emblème est un cône de chantier, je ne sais pas
|
Son emblème est un cône de chantier, mais je ne sais pas
|
||||||
si ça a un sens caché. Mais soyons sérieux deux minutes.
|
si ça a un sens caché. Mais soyons sérieux deux minutes.
|
||||||
VLC propose une interface \textsl{clickconvi},
|
VLC propose une interface clickconvi, que nous allons
|
||||||
que nous allons
|
|
||||||
soigneusement éviter, pour nous concentrer sur la ligne
|
soigneusement éviter, pour nous concentrer sur la ligne
|
||||||
de commande.
|
de commande.
|
||||||
|
|
||||||
@ -179,8 +174,6 @@ used for retrieving technical information and other
|
|||||||
metadata about audio or video files.
|
metadata about audio or video files.
|
||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
Et avec du \textbf{Zenitram} dedans \textit{:)}
|
|
||||||
|
|
||||||
% --------------------------------------------------------------------
|
% --------------------------------------------------------------------
|
||||||
\section{MPV} \index{MPV}
|
\section{MPV} \index{MPV}
|
||||||
|
|
||||||
@ -192,10 +185,6 @@ Et avec du \textbf{Zenitram} dedans \textit{:)}
|
|||||||
of different video and audio output methods are supported.
|
of different video and audio output methods are supported.
|
||||||
\end {quote}
|
\end {quote}
|
||||||
|
|
||||||
Un avantage de Mpv sur ses camarades (Mplayer, Ffplay\dots) est évident
|
|
||||||
dès que l'on joue une vidéo en boucle~: la transition entre la fin
|
|
||||||
et le début est propre.
|
|
||||||
|
|
||||||
% --------------------------------------------------------------------
|
% --------------------------------------------------------------------
|
||||||
|
|
||||||
\section{Autres trucs}
|
\section{Autres trucs}
|
||||||
|
@ -5,7 +5,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
/*-------------------------------------------------------*/
|
/*---------------------------------------------------------------------*/
|
||||||
|
|
||||||
void dump_line(char *titre, char *ligne, int combien)
|
void dump_line(char *titre, char *ligne, int combien)
|
||||||
{
|
{
|
||||||
int foo;
|
int foo;
|
||||||
@ -18,14 +19,15 @@ for (foo=0; foo<combien; foo++) {
|
|||||||
}
|
}
|
||||||
puts("");
|
puts("");
|
||||||
for (foo=0; foo<combien; foo++) {
|
for (foo=0; foo<combien; foo++) {
|
||||||
printf(" %c ", isprint(ptr[foo]) ? ptr[foo] : ' ');
|
printf(" %c ", isprint(ptr[foo]) ? ptr[foo] : '?');
|
||||||
}
|
}
|
||||||
puts("");
|
puts("");
|
||||||
}
|
}
|
||||||
/*-------------------------------------------------------*/
|
/*---------------------------------------------------------------------*/
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char input[] = "foo bar\tquux wiz";
|
char input[] = "foo bar quux quiz";
|
||||||
char *cptr, *copie;
|
char *cptr, *copie;
|
||||||
int foo;
|
int foo;
|
||||||
|
|
||||||
@ -39,16 +41,12 @@ dump_line("1er strtok", copie, sizeof(input));
|
|||||||
printf(" got [%s]\n", cptr);
|
printf(" got [%s]\n", cptr);
|
||||||
puts("");
|
puts("");
|
||||||
|
|
||||||
puts(" two more strtok...");
|
|
||||||
cptr = strtok(NULL, " \t");
|
cptr = strtok(NULL, " \t");
|
||||||
printf(" got [%s]\n", cptr);
|
|
||||||
cptr = strtok(NULL, " \t");
|
cptr = strtok(NULL, " \t");
|
||||||
printf(" got [%s]\n", cptr);
|
|
||||||
dump_line("2eme & 3me strtok", copie, sizeof(input));
|
dump_line("2eme & 3me strtok", copie, sizeof(input));
|
||||||
|
foo = cptr - copie;
|
||||||
foo = cptr - copie; /* this is the hack :) */
|
|
||||||
|
|
||||||
printf(" index = %d\n", foo);
|
printf(" index = %d\n", foo);
|
||||||
printf(" and we have [%s]\n", input+foo);
|
printf(" and we have [%s]\n", input+foo);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/*---------------------------------------------------------------------*/
|
||||||
|
@ -65,7 +65,9 @@ Cependant, toute cette ouvrage est en cours de
|
|||||||
réécriture avec Mousepad et \LaTeX{}
|
réécriture avec Mousepad et \LaTeX{}
|
||||||
selon la méthode éprouvée dite
|
selon la méthode éprouvée dite
|
||||||
de «~La~Rache~»\index{rache},
|
de «~La~Rache~»\index{rache},
|
||||||
essentiellement sur une machine Debian/amd64, et peut-être de la
|
essentiellement sur une machine Debian/amd64, avec des
|
||||||
|
morceaux de Fedora\index{Fedora} Server 33 juste là, à coté,
|
||||||
|
vers la page \pageref{chap:Fedora} et peut-être de la
|
||||||
Slackware\index{Slackware} qui traine.
|
Slackware\index{Slackware} qui traine.
|
||||||
|
|
||||||
Mes sources sont assez diverses%
|
Mes sources sont assez diverses%
|
||||||
|
Loading…
Reference in New Issue
Block a user