Compare commits

...

4 Commits

Author SHA1 Message Date
tTh c6fe2224bf more on strtok 2023-09-03 22:24:56 +02:00
tTh 42ead5b695 no more fedora 2023-09-03 22:24:28 +02:00
tTh ef609cbb57 little edits 2023-09-03 20:30:43 +02:00
tTh b404dde88b cosmetic 2023-09-03 07:49:40 +02:00
8 changed files with 110 additions and 20 deletions

View File

@ -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.}

View File

@ -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
% ================================================================

View File

@ -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é.

View File

@ -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.

View File

@ -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}

View File

@ -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}

View File

@ -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;
}
/*---------------------------------------------------------------------*/

View File

@ -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%