Compare commits
4 Commits
9d08631b32
...
c6fe2224bf
Author | SHA1 | Date | |
---|---|---|---|
|
c6fe2224bf | ||
|
42ead5b695 | ||
|
ef609cbb57 | ||
|
b404dde88b |
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~:
|
||||
les fonctions \texttt{malloc} et \texttt{free} sont là pour ça.
|
||||
|
||||
La première demande au mc/p de nous préter une certaine quantité
|
||||
La première fonction demande au mc/p de nous préter une certaine quantité
|
||||
de mémoire, que nous pourront utiliser à notre guise.
|
||||
Et la seconde restitue la zone mémoire au système sous-jacent.
|
||||
Et la seconde restitue cette zone mémoire au système sous-jacent.
|
||||
|
||||
Un rapide synopsis minimal d'utilisation~:
|
||||
|
||||
@ -536,10 +536,72 @@ extern int optind, opterr, optopt;
|
||||
La page de man de getopt(3) contient des explications détaillées
|
||||
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}
|
||||
|
||||
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}
|
||||
\item{Variables non initialisées.}
|
||||
|
||||
|
18
chap/OSC.tex
18
chap/OSC.tex
@ -16,6 +16,8 @@ qui reste simple
|
||||
Cette bibliothèque est livrée avec deux outils que nous
|
||||
allons voir maintenant.
|
||||
|
||||
% ================================================================
|
||||
|
||||
\section{oscdump \& oscsend}
|
||||
\index{oscdump}\index{oscsend}
|
||||
|
||||
@ -43,7 +45,7 @@ tth@debian:~$ oscdump 1664
|
||||
tth@debian:~$
|
||||
\end{verbatim}
|
||||
|
||||
% ------------------------------------------------
|
||||
% ================================================================
|
||||
|
||||
\section{Exemple de code}
|
||||
|
||||
@ -67,7 +69,8 @@ Cette partie là est beaucoup plus simple.
|
||||
J'avoue ne pas encore savoir ce que veut bien dire la
|
||||
valeur de retour.
|
||||
|
||||
% ------------------------------------------------
|
||||
% ================================================================
|
||||
|
||||
\section{En Perl} \index{Perl}
|
||||
|
||||
\begin{verbatim}
|
||||
@ -80,7 +83,15 @@ or die "Could not start client: $@\n";
|
||||
$client->send(['/proc/kcore', 'i', 61, 's', "bla"]);
|
||||
\end{verbatim}
|
||||
|
||||
% ------------------------------------------------
|
||||
% ================================================================
|
||||
% nouveau: Sat Jul 15 07:14:10 UTC 2023
|
||||
|
||||
\section{Le routage}
|
||||
|
||||
WIP...\index{XXX}
|
||||
|
||||
|
||||
% ================================================================
|
||||
|
||||
\section{Autres logiciels}
|
||||
|
||||
@ -90,4 +101,5 @@ Processing\index{Processing},
|
||||
Chuck\index{Chuck} (page \pageref{chuck-osc}),
|
||||
\dots
|
||||
|
||||
% ================================================================
|
||||
|
||||
|
@ -14,7 +14,7 @@ le graphique. Il ne nécessite pas de système d'exploitation.
|
||||
\section{Configuration}
|
||||
|
||||
La configuration de Dosbox est par défaut dans le fichier
|
||||
\texttt{~/.dosbox/dosbox-0.74-2.conf}. Vous remarquerez
|
||||
\texttt{\$HOME/.dosbox/dosbox-0.74-2.conf}. Vous remarquerez
|
||||
que le numéro de version est \textbf{dans} le nom de
|
||||
ce fichier. Ce fichier est abondamment commenté.
|
||||
|
||||
|
@ -78,6 +78,8 @@ Je demande à voir\footnote{Parce que c'est écrit par LP ?}.
|
||||
\section{Translation d'adresse}
|
||||
\index{NAT}
|
||||
|
||||
% XXX expliquer un peu le NAT !
|
||||
|
||||
Voir en page \pageref{NAT} pour découvrir comment utiliser une
|
||||
machine connectée en WiFi pour donner accès à Internet à votre
|
||||
réseau local Ethernet\dots
|
||||
@ -87,7 +89,7 @@ défis à relever pour en faire une solution complexe et
|
||||
amusante à des problèmes inexistants et datant du siècle
|
||||
dernier.
|
||||
Par exemple la comparaison de la mise en œuvre du NAT
|
||||
avec \texttt{iptable} et \texttt{pfctl} est une source de trolls
|
||||
avec \texttt{iptables} et \texttt{pfctl} est une source de trolls
|
||||
sans fin.
|
||||
|
||||
|
||||
|
@ -48,6 +48,9 @@ ou une playlistde fichiers \texttt{.ogg}\index{ogg}.
|
||||
\textsl{more to come...}
|
||||
|
||||
%-------------------------------------------------------------
|
||||
|
||||
% https://github.com/radiofrance/rf-liquidsoap
|
||||
|
||||
\section{liquidsoap}
|
||||
\index{liquidsoap}
|
||||
|
||||
|
@ -132,6 +132,10 @@ ffmpeg -nostdin \
|
||||
wip.mp4
|
||||
\end{verbatim}
|
||||
|
||||
OMFG! Il manque le son.
|
||||
|
||||
% -----------------------------------------------------------------
|
||||
|
||||
\subsection{Questions}
|
||||
|
||||
Comment convertir lors de l'encodage un fichier \texttt{.WAV}
|
||||
@ -152,9 +156,10 @@ ffmpeg -f x11grab -video\_size cif -framerate 25 -i :0.0 /tmp/out.mpg
|
||||
\section{VLC} \index{vlc}
|
||||
|
||||
VLC est un peu le couteau suisse à 112 lames du multimédia.
|
||||
Son emblème est un cône de chantier, mais je ne sais pas
|
||||
Son emblème est un cône de chantier, je ne sais pas
|
||||
si ça a un sens caché. Mais soyons sérieux deux minutes.
|
||||
VLC propose une interface clickconvi, que nous allons
|
||||
VLC propose une interface \textsl{clickconvi},
|
||||
que nous allons
|
||||
soigneusement éviter, pour nous concentrer sur la ligne
|
||||
de commande.
|
||||
|
||||
@ -174,6 +179,8 @@ used for retrieving technical information and other
|
||||
metadata about audio or video files.
|
||||
\end{quote}
|
||||
|
||||
Et avec du \textbf{Zenitram} dedans \textit{:)}
|
||||
|
||||
% --------------------------------------------------------------------
|
||||
\section{MPV} \index{MPV}
|
||||
|
||||
@ -185,6 +192,10 @@ metadata about audio or video files.
|
||||
of different video and audio output methods are supported.
|
||||
\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}
|
||||
|
@ -5,8 +5,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
void dump_line(char *titre, char *ligne, int combien)
|
||||
{
|
||||
int foo;
|
||||
@ -19,15 +18,14 @@ for (foo=0; foo<combien; foo++) {
|
||||
}
|
||||
puts("");
|
||||
for (foo=0; foo<combien; foo++) {
|
||||
printf(" %c ", isprint(ptr[foo]) ? ptr[foo] : '?');
|
||||
printf(" %c ", isprint(ptr[foo]) ? ptr[foo] : ' ');
|
||||
}
|
||||
puts("");
|
||||
}
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------------*/
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char input[] = "foo bar quux quiz";
|
||||
char input[] = "foo bar\tquux wiz";
|
||||
char *cptr, *copie;
|
||||
int foo;
|
||||
|
||||
@ -41,12 +39,16 @@ dump_line("1er strtok", copie, sizeof(input));
|
||||
printf(" got [%s]\n", cptr);
|
||||
puts("");
|
||||
|
||||
puts(" two more strtok...");
|
||||
cptr = strtok(NULL, " \t");
|
||||
printf(" got [%s]\n", cptr);
|
||||
cptr = strtok(NULL, " \t");
|
||||
printf(" got [%s]\n", cptr);
|
||||
dump_line("2eme & 3me strtok", copie, sizeof(input));
|
||||
foo = cptr - copie;
|
||||
|
||||
foo = cptr - copie; /* this is the hack :) */
|
||||
|
||||
printf(" index = %d\n", foo);
|
||||
printf(" and we have [%s]\n", input+foo);
|
||||
return 0;
|
||||
}
|
||||
/*---------------------------------------------------------------------*/
|
||||
|
@ -65,9 +65,7 @@ Cependant, toute cette ouvrage est en cours de
|
||||
réécriture avec Mousepad et \LaTeX{}
|
||||
selon la méthode éprouvée dite
|
||||
de «~La~Rache~»\index{rache},
|
||||
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
|
||||
essentiellement sur une machine Debian/amd64, et peut-être de la
|
||||
Slackware\index{Slackware} qui traine.
|
||||
|
||||
Mes sources sont assez diverses%
|
||||
|
Loading…
Reference in New Issue
Block a user