Compare commits
12 Commits
fd3a4b8336
...
078d3d6b3a
Author | SHA1 | Date | |
---|---|---|---|
![]() |
078d3d6b3a | ||
![]() |
97f3cb336d | ||
![]() |
ae2f0d965e | ||
![]() |
0480a7a73f | ||
![]() |
4b438e7f7a | ||
![]() |
98334bd25e | ||
![]() |
f00a06b0c7 | ||
![]() |
f3289fc23c | ||
![]() |
f08879204f | ||
![]() |
717006e34a | ||
![]() |
1541deeff0 | ||
![]() |
48beb52b14 |
@ -7,8 +7,8 @@ D'après Wikipédia :
|
|||||||
|
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
Le DMX512 (Digital Multiplexing) est une norme de transmission de données
|
Le DMX512 (Digital Multiplexing) est une norme de transmission de données
|
||||||
utilisée pour le contrôle de l'éclairage et des effets de scène dans le spectacle
|
utilisée pour le contrôle de l'éclairage et des effets de scène dans le
|
||||||
vivant.
|
spectacle vivant.
|
||||||
|
|
||||||
Le protocole DMX512 (qui utilise généralement une liaison
|
Le protocole DMX512 (qui utilise généralement une liaison
|
||||||
suivant la norme EIA RS 485 et cadencée à 250 kb/s) permet
|
suivant la norme EIA RS 485 et cadencée à 250 kb/s) permet
|
||||||
@ -26,13 +26,39 @@ appelée une « trame » DMX).
|
|||||||
https://ryderdamen.com/blog/enttec-open-dmx-on-linux/
|
https://ryderdamen.com/blog/enttec-open-dmx-on-linux/
|
||||||
|
|
||||||
% -----------------------------------------------------
|
% -----------------------------------------------------
|
||||||
\section{Enttec OpenDMX}
|
\section{Enttec OpenDMX} \index{OpenDMX} \label{OpenDMX}
|
||||||
|
|
||||||
|
D'après le constructeur :
|
||||||
|
\textsl{
|
||||||
|
The OPEN DMX USB is a DMX widget used to output
|
||||||
|
DMX from a computer. Simply connect it using it’s
|
||||||
|
USB 2.0 Type B port and launch your compatible
|
||||||
|
software.
|
||||||
|
The OPEN DMX USB is discovered as a USB Serial
|
||||||
|
Device or virtual COM Port dependent on the FTDI
|
||||||
|
driver installed on your system.
|
||||||
|
The Open DMX USB’s output is processed directly on
|
||||||
|
the computer’s processor.
|
||||||
|
}
|
||||||
|
|
||||||
|
Nous allon voir ce qu'il en est exactement.
|
||||||
|
Après branchement, essayons d'identifier cette interface.
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
Bus 001 Device 027: ID 0403:6001
|
Bus 001 Device 027: ID 0403:6001
|
||||||
Future Technology Devices International, Ltd FT232 Serial (UART) IC
|
Future Technology Devices International, Ltd FT232 Serial (UART) IC
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
SUBSYSTEM=="tty" ATTRS{idVendor}=="0403"
|
||||||
|
ATTRS{idProduct}=="6001" SYMLINK+="phytotron"
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Le tout sur une ligne et dans le fichier
|
||||||
|
\texttt{/etc/udev/rules.d/70-emttec-opendmx.rules}.
|
||||||
|
En général une erreur de syntaxe apparait dans
|
||||||
|
\textit{varlogmessage}.
|
||||||
|
|
||||||
look at \texttt{tcsendbreak} !
|
look at \texttt{tcsendbreak} !
|
||||||
|
|
||||||
% -----------------------------------------------------
|
% -----------------------------------------------------
|
||||||
|
@ -96,7 +96,7 @@ La magie du shebang\index{shebang}
|
|||||||
Nous disposons d'un fichier SSV
|
Nous disposons d'un fichier SSV
|
||||||
(Space Separated Values)\footnote{C'est nouveau, ça vient de sortir.}
|
(Space Separated Values)\footnote{C'est nouveau, ça vient de sortir.}
|
||||||
provenant d'un système optico-numérique bi-dimensionnel multi-planaire
|
provenant d'un système optico-numérique bi-dimensionnel multi-planaire
|
||||||
(aka Webcam\index{Webcam}).
|
(aka Webcam\index{webcam}).
|
||||||
Et nous voulons en tirer quelques chiffres et graphiques bien
|
Et nous voulons en tirer quelques chiffres et graphiques bien
|
||||||
clinquants,
|
clinquants,
|
||||||
par exemple les éventuels rapports entre le rouge et le bleu.
|
par exemple les éventuels rapports entre le rouge et le bleu.
|
||||||
|
@ -47,7 +47,7 @@ Une machine connectée en wifi sur une friboite\footnote{ou le
|
|||||||
Cisco sauvage de la salle d'AG, hein, mais ça ne sera
|
Cisco sauvage de la salle d'AG, hein, mais ça ne sera
|
||||||
pas le même nameserver.} peut facilement
|
pas le même nameserver.} peut facilement
|
||||||
faire translateur d'adresse pour un réseau branché sur
|
faire translateur d'adresse pour un réseau branché sur
|
||||||
son eth, à condition de connaitre les
|
son \texttt{eth}, à condition de connaitre les
|
||||||
incantations magiques
|
incantations magiques
|
||||||
(qui sont ici très linuxisantes) :
|
(qui sont ici très linuxisantes) :
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ modprobe iptable_nat
|
|||||||
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
|
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Ensuite sur les machines du lan, donc le coté ethernet,
|
Ensuite sur les machines du lan, donc le coté Ethernet,
|
||||||
il faut incanter ce genre de trucs :
|
il faut incanter ce genre de trucs :
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
|
@ -196,7 +196,14 @@ Tue Oct 17 08:55:01 CEST 2023
|
|||||||
tth@redlady:~$
|
tth@redlady:~$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
Simple et efficace.
|
Simple et efficace. \textbf{Mais\dots}
|
||||||
|
|
||||||
|
Mais ça ne marche pas à tous les coups comme vous le montre
|
||||||
|
clairement cet exemple. L'utilisation de la fonction
|
||||||
|
\texttt{getenv(3)} est très facilement contournable.
|
||||||
|
|
||||||
|
\lstinputlisting[language=C]{code/C/use_envp.c}
|
||||||
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
|
@ -20,7 +20,8 @@ foo = read(joy_fd, &js, sizeof(struct js_event));
|
|||||||
|
|
||||||
Quand les choses ne se passent pas comme prévu, quand il
|
Quand les choses ne se passent pas comme prévu, quand il
|
||||||
y a des accrocs dans le plan, que le résultat n'est
|
y a des accrocs dans le plan, que le résultat n'est
|
||||||
qu'une video totalement noire de 17 minutes.
|
qu'une video totalement noire de 17 minutes, que des
|
||||||
|
octets incongrus arrivent depuis l'Arduino.
|
||||||
dmesg, lshw, lsusb, lspci\dots
|
dmesg, lshw, lsusb, lspci\dots
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
@ -83,7 +84,8 @@ Connecter un Minitel\index{MINITEL}
|
|||||||
pour dialoguer avec Ulla Trentsixquinze ? Brancher un
|
pour dialoguer avec Ulla Trentsixquinze ? Brancher un
|
||||||
Sportster 14400 pour retrouver Fidonet\index{Fidonet} ?
|
Sportster 14400 pour retrouver Fidonet\index{Fidonet} ?
|
||||||
Discuter avec un équipement avionnique ? Rediriger
|
Discuter avec un équipement avionnique ? Rediriger
|
||||||
l'impression d'un MSX\index{MSX} vers Cups\index{cups} ?
|
l'impression d'un MSX\index{MSX} ou d'un Alice 32
|
||||||
|
vers Cups\index{cups} ?
|
||||||
|
|
||||||
Les possibilités sont infinies. C'est votre imagination qui
|
Les possibilités sont infinies. C'est votre imagination qui
|
||||||
est la limite\footnote{Comme à peu près tout dans la vie.}
|
est la limite\footnote{Comme à peu près tout dans la vie.}
|
||||||
@ -98,6 +100,11 @@ périphérique \texttt{/dev/parport}
|
|||||||
|
|
||||||
Question: comment faire du \textsl{bitbanging} ?
|
Question: comment faire du \textsl{bitbanging} ?
|
||||||
|
|
||||||
|
% -----------------------------------------------------------
|
||||||
|
\section{USB} \index{USB} \label{USB}
|
||||||
|
|
||||||
|
Universal Serial Bus
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
|
|
||||||
\section{Disques durs}
|
\section{Disques durs}
|
||||||
@ -158,8 +165,8 @@ idéal, la prédiction des pannes.
|
|||||||
|
|
||||||
\textsl{Check and repair a Linux filesystem}
|
\textsl{Check and repair a Linux filesystem}
|
||||||
|
|
||||||
Fortune du jour : \textsf{Franchement, là, je préfère que ce soit vous qui prenne la
|
Fortune du jour : \textsf{Franchement, là, je préfère que ce soit vous qui prenne
|
||||||
tronçonneuse, parce que là, c'est pas beau à voir\dots}
|
la tronçonneuse, parce que là, c'est pas beau à voir\dots}
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
\subsection{tune2fs}\index{tune2fs}
|
\subsection{tune2fs}\index{tune2fs}
|
||||||
@ -167,6 +174,26 @@ tronçonneuse, parce que là, c'est pas beau à voir\dots}
|
|||||||
\textsl{Adjust tunable filesystem parameters on ext2/ext3/ext4
|
\textsl{Adjust tunable filesystem parameters on ext2/ext3/ext4
|
||||||
filesystems}\footnote{You can tune a fs, but you can't tuna fish}.
|
filesystems}\footnote{You can tune a fs, but you can't tuna fish}.
|
||||||
|
|
||||||
|
% -----------------------------------------------------------
|
||||||
|
% nouveau 2 juin 2024
|
||||||
|
% basé sur mes tentatives pour faire marcher l'interface
|
||||||
|
% Enttec OpenDMX USB
|
||||||
|
|
||||||
|
\section{udev} \index{udev} \label{udev}
|
||||||
|
|
||||||
|
\begin{quote}
|
||||||
|
udev supplies the system software with device events, manages
|
||||||
|
permissions of device nodes and may create additional symlinks in the
|
||||||
|
/dev directory, or renames network interfaces. The kernel usually just
|
||||||
|
assigns unpredictable device names based on the order of discovery.
|
||||||
|
Meaningful symlinks or network device names provide a way to reliably
|
||||||
|
identify devices based on their properties or current configuration.
|
||||||
|
\end{quote}
|
||||||
|
|
||||||
|
Avant de rentre dans les détails, nous pouvons aller voir un exemple
|
||||||
|
concret en page \pageref{OpenDMX} où nous atriburons un nom fixe
|
||||||
|
à une interface USB.
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
|
|
||||||
\section{Sensors} \index{sensors}
|
\section{Sensors} \index{sensors}
|
||||||
@ -195,7 +222,7 @@ int retcode;
|
|||||||
struct ifreq req;
|
struct ifreq req;
|
||||||
|
|
||||||
#if DEBUG_LEVEL
|
#if DEBUG_LEVEL
|
||||||
fprintf(stderr, ">>> %s \"%s\" to %p\n", \
|
fprintf(stderr, ">>> %s ( \"%s\" to %p )\n", \
|
||||||
__func__, ifname, p_flags);
|
__func__, ifname, p_flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -225,8 +252,7 @@ if (retcode < 0)
|
|||||||
close(fd);
|
close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#if DEBUG_LEVEL
|
#if DEBUG_LEVEL /* display the result */
|
||||||
/* display the result */
|
|
||||||
fprintf(stderr, "flags = 0x%04x\n", req.ifr_flags);
|
fprintf(stderr, "flags = 0x%04x\n", req.ifr_flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -241,7 +267,6 @@ Hélas, je n'ai pas pu trop tester ce truc sur beaucoup de systèmes,
|
|||||||
et je vous propose de ne pas trop lui faire confiance pour une
|
et je vous propose de ne pas trop lui faire confiance pour une
|
||||||
application critique...
|
application critique...
|
||||||
|
|
||||||
|
|
||||||
% -----------------------------------------------------------
|
% -----------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
Le traitement des images est un art à part entière. Nous allons
|
Le traitement des images est un art à part entière. Nous allons
|
||||||
voir quelques grands classiques de la catégorie pas du tout
|
voir quelques grands classiques de la catégorie pas du tout
|
||||||
interactif. Le genre de machin que l'on peut ranger au fond
|
interactif.
|
||||||
|
Le genre de machin que l'on peut ranger au fond
|
||||||
d'un script shell pour le réutiliser la semaine prochaine.
|
d'un script shell pour le réutiliser la semaine prochaine.
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
@ -27,7 +28,8 @@ et leurs interactions parfois troublantes\dots
|
|||||||
Il y a plusieurs binaires dans le paquet : \texttt{convert} pour
|
Il y a plusieurs binaires dans le paquet : \texttt{convert} pour
|
||||||
la plupart des traitements,
|
la plupart des traitements,
|
||||||
\texttt{display} et \texttt{animate} pour visualiser des images,
|
\texttt{display} et \texttt{animate} pour visualiser des images,
|
||||||
\texttt{identify} pour en lire les méta-données.
|
\texttt{identify} pour en lire les méta-données,
|
||||||
|
\texttt{montage} pour assembler plusieurs images.
|
||||||
|
|
||||||
Ils partagent un certain nombre d'options communes.
|
Ils partagent un certain nombre d'options communes.
|
||||||
Certains d'entre eux peuvent avoir un effet destructif%
|
Certains d'entre eux peuvent avoir un effet destructif%
|
||||||
@ -190,6 +192,10 @@ On peut aussi procéder autrement, avec les outils PNM\index{PNM} :
|
|||||||
pngtopnm \$negatif | ppmtotga -rgb -norle > \$picz
|
pngtopnm \$negatif | ppmtotga -rgb -norle > \$picz
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
Un volontaire dans la salle pour faire des tests de performance ?
|
||||||
|
Ma première hypothèse est que le résultat des mesures peut
|
||||||
|
être assez surprenant.
|
||||||
|
|
||||||
% ------------------------------------------
|
% ------------------------------------------
|
||||||
|
|
||||||
\subsection{identify}\index{identify}
|
\subsection{identify}\index{identify}
|
||||||
@ -311,7 +317,7 @@ for ((y=0; y<250; y++)) {
|
|||||||
|
|
||||||
Comment faire un \textsl{resize} avec NetPBM ?
|
Comment faire un \textsl{resize} avec NetPBM ?
|
||||||
Est-il nécessaire d'apprendre la bibliothèque de fonctions
|
Est-il nécessaire d'apprendre la bibliothèque de fonctions
|
||||||
\texttt{libnetpbm}\footnote{Réponse: oui.} ?
|
\texttt{libnetpbm}\footnote{Réponse: certainement oui.} ?
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
|
||||||
@ -340,11 +346,11 @@ use it heavily.
|
|||||||
\end{quote}
|
\end{quote}
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tiffcp combines one or more files created according to the Tag Image
|
tiffcp combines one or more files created according to the Tag Image
|
||||||
File Format, Revision 6.0 into a single TIFF file. Because the output
|
File Format, Revision 6.0 into a single TIFF file. Because the output
|
||||||
file may be compressed using a different algorithm than the input
|
file may be compressed using a different algorithm than the input
|
||||||
files, tiffcp is most often used to convert between different compres‐
|
files, tiffcp is most often used to convert between different compres‐
|
||||||
sion schemes.
|
sion schemes.
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
@ -37,7 +37,7 @@ connexion possibles, la liste des appareils gérés, et l'éventuel
|
|||||||
appareil connecté, si il est sous tension, bien entendu :)
|
appareil connecté, si il est sous tension, bien entendu :)
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
tth@redlady:~/Photos/Canon600D/2022-12$ gphoto2 --auto-detect
|
tth@redlady:~/Photos$ gphoto2 --auto-detect
|
||||||
Model Port
|
Model Port
|
||||||
----------------------------------------------------------
|
----------------------------------------------------------
|
||||||
Canon EOS 600D usb:002,005
|
Canon EOS 600D usb:002,005
|
||||||
|
@ -12,6 +12,8 @@ avec une interface Web et/ou des outils en cli..
|
|||||||
Les aspects matériels de la connexion seront vus dans un chapitre adéquat,
|
Les aspects matériels de la connexion seront vus dans un chapitre adéquat,
|
||||||
en page \pageref{portparallele} pour le port \texttt{//},
|
en page \pageref{portparallele} pour le port \texttt{//},
|
||||||
et \pageref{rs232} pour le serial.
|
et \pageref{rs232} pour le serial.
|
||||||
|
L'omniprésente connective USB\index{USB} demande peut-être
|
||||||
|
un chapitre à part entière.
|
||||||
|
|
||||||
%-----------------------------------------------------------------
|
%-----------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -39,24 +39,47 @@ Thu Oct 5 00:53:01 UTC 2023
|
|||||||
tth@redlady:~$
|
tth@redlady:~$
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
|
|
||||||
|
Ces ordres peuvent être des commandes internes à l'interpréteur,
|
||||||
|
d'autres seront des commandes fournies par des exécutables
|
||||||
|
externes. Pour le début, la différence n'est pas importante.
|
||||||
|
|
||||||
|
Mais comment le shell fait-il pour retrouver tous les outils
|
||||||
|
dont il a besoin ? Simplement, il connait une liste
|
||||||
|
d'endroits où aller chercher, une sorte de chemin de recherche,
|
||||||
|
c'est d'ailleurs pour ça que cette liste
|
||||||
|
est nommée \texttt{PATH}\index{PATH}.
|
||||||
|
Il est très simple de la visualiser~:
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@redlady:~/Devel/TetaTricks$ echo $PATH
|
||||||
|
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
|
|
||||||
\section{Langage}\index{script}
|
\section{Un langage}\index{script}
|
||||||
|
|
||||||
Le shell est aussi, et surtout, un langage de programmation, parfois
|
Le shell est aussi, et surtout, un langage de programmation
|
||||||
appelé \textsl{glue-language} parce qu'il permet de "coller" ensemble
|
à part entière.
|
||||||
plusieurs opérations élémentaires, d'abord avec ses opérateurs internes
|
Il est parfois appelé \textsl{glue-language} parce qu'il permet de
|
||||||
et ensuite l'utilisation d'outils
|
"coller" ensemble plusieurs opérations élémentaires, d'abord avec
|
||||||
extérieurs\footnote{Grep, Sed, Awk, BwBasic...}
|
ses opérateurs internes et ensuite par l'utilisation d'outils
|
||||||
|
extérieurs\footnote{Grep, Sed, Awk, BwBasic, Sort, Gfortran...}
|
||||||
divers. C'est \textsl{très} efficace.
|
divers. C'est \textsl{très} efficace.
|
||||||
|
|
||||||
|
Nous allons commencer par voir quelques notions liées à
|
||||||
|
la création d'un script exécutable, puis d'un enchainement
|
||||||
|
de commandes.
|
||||||
|
Nous passerons ensuite aux structures de contrôle, comme les
|
||||||
|
tests et les boucles.
|
||||||
|
|
||||||
% --------------------------------------------------------------
|
% --------------------------------------------------------------
|
||||||
|
|
||||||
\subsection{Le \textsc{shebang}} \index{shebang}
|
\subsection{Le shebang} \index{shebang}
|
||||||
|
|
||||||
Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait
|
Le shebang, c'est ce couple de caractères \texttt{\#!} qui apparait
|
||||||
au tout début d'un script shell.
|
au tout début d'un script shell.
|
||||||
Le 'she' est l'abréviation de 'sharp', coupant en français. C'est
|
Le 'she' est l'abréviation de 'sharp', qui veut dire 'coupant' en français.
|
||||||
|
C'est
|
||||||
probablement une allusion aux cotés tranchants du \texttt{\#}.
|
probablement une allusion aux cotés tranchants du \texttt{\#}.
|
||||||
Quand au 'bang', c'est le point d'exclamation après l'explosion
|
Quand au 'bang', c'est le point d'exclamation après l'explosion
|
||||||
de la forkbomb.
|
de la forkbomb.
|
||||||
@ -67,6 +90,26 @@ octets. Si les deux premiers sont \textsl{0x23 0x21}, le reste
|
|||||||
de la première ligne sera interprété pour lancer un autre exécutable,
|
de la première ligne sera interprété pour lancer un autre exécutable,
|
||||||
avec un traitement particuler des options.
|
avec un traitement particuler des options.
|
||||||
|
|
||||||
|
Et à ce momment-là des explications, on entend Serguey qui hurle
|
||||||
|
du fond de la salle « schmod777 en force ! ».
|
||||||
|
Et il a bien raison. En effet, ce fichier doit être vu comme
|
||||||
|
possiblement exécutable selon les droits 'X' qu'il a.
|
||||||
|
Il y a une commande prévue à cet effet, dont nous allons voir
|
||||||
|
l'usage à l'instant, avec la création d'un script complet~:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
tth@redlady:~$ echo '#!/bin/bash' > foo.sh
|
||||||
|
tth@redlady:~$ echo 'printf "%d" 85 >> foo.sh
|
||||||
|
tth@redlady:~$ chmod u+x ./foo.sh
|
||||||
|
tth@redlady:~$ ./foo.sh
|
||||||
|
55
|
||||||
|
tth@redlady:~$ cat foo.sh
|
||||||
|
#!/bin/bash
|
||||||
|
printf "%x\n" 85
|
||||||
|
tth@redlady:~$
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
|
||||||
% ==============================================================
|
% ==============================================================
|
||||||
\section{Le pipeline}\index{pipeline}\label{pipeline}
|
\section{Le pipeline}\index{pipeline}\label{pipeline}
|
||||||
|
|
||||||
@ -96,6 +139,8 @@ $
|
|||||||
|
|
||||||
\section{Structures de contrôle}
|
\section{Structures de contrôle}
|
||||||
|
|
||||||
|
Les plus importantes sont là : le choix, la boucle, l'attente.
|
||||||
|
|
||||||
% --------------------------------------------------------------
|
% --------------------------------------------------------------
|
||||||
|
|
||||||
\subsection {Les tests}
|
\subsection {Les tests}
|
||||||
|
@ -62,7 +62,6 @@ Il existe bien une alternative, mais je n'ai pas encore essayé~:
|
|||||||
\# Write out 20 png format frames from a video starting at 3 minutes, 46 seconds.
|
\# Write out 20 png format frames from a video starting at 3 minutes, 46 seconds.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Tu peux générer les images de transition avec
|
Tu peux générer les images de transition avec
|
||||||
ImageMagick\index{ImageMagick} :
|
ImageMagick\index{ImageMagick} :
|
||||||
\texttt{convert a.png b.png -alpha set -channel A
|
\texttt{convert a.png b.png -alpha set -channel A
|
||||||
@ -149,8 +148,6 @@ OMFG! Il manque le son.
|
|||||||
% mais où ai-je bien pu trouver ça ?
|
% mais où ai-je bien pu trouver ça ?
|
||||||
%
|
%
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
read -p "*** Press Enter to start recording ***"
|
read -p "*** Press Enter to start recording ***"
|
||||||
"$FFMPEGBIN" \
|
"$FFMPEGBIN" \
|
||||||
@ -224,11 +221,11 @@ Et avec du \textbf{Zenitram} dedans \textit{:)}
|
|||||||
\section{MPV} \index{MPV}
|
\section{MPV} \index{MPV}
|
||||||
|
|
||||||
\begin{quote}
|
\begin{quote}
|
||||||
mpv is a media player based on MPlayer and mplayer2. It supports a wide
|
mpv is a media player based on MPlayer and mplayer2. It supports a wide
|
||||||
variety of video file formats, audio and video codecs, and subtitle
|
variety of video file formats, audio and video codecs, and subtitle
|
||||||
types. Special input URL types are available to read input from a vari‐
|
types. Special input URL types are available to read input from a variety
|
||||||
ety of sources other than disk files. Depending on platform, a variety
|
of sources other than disk files. Depending on platform, a variety
|
||||||
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
|
Un avantage de Mpv sur ses camarades (Mplayer, Ffplay\dots) est évident
|
||||||
|
1
code/C/.gitignore
vendored
1
code/C/.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
fgets-simple
|
fgets-simple
|
||||||
demo-strtok
|
demo-strtok
|
||||||
packtest
|
packtest
|
||||||
|
use_envp
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
# exemples pour le chapitre sur le C
|
# exemples pour le chapitre sur le C
|
||||||
# new Sat Feb 11 12:06:34 CET 2023
|
# new Sat Feb 11 12:06:34 CET 2023
|
||||||
|
|
||||||
all: no-op slowprint fgets-simple packtest
|
all: no-op slowprint fgets-simple packtest use_envp
|
||||||
|
|
||||||
no-op: no-op.c Makefile
|
no-op: no-op.c Makefile
|
||||||
gcc -Wall $< -o $@
|
gcc -Wall $< -o $@
|
||||||
@ -19,3 +19,8 @@ demo-strtok: demo-strtok.c Makefile
|
|||||||
# added Wed Mar 27 10:01:41 UTC 2024
|
# added Wed Mar 27 10:01:41 UTC 2024
|
||||||
packtest: packtest.c
|
packtest: packtest.c
|
||||||
gcc -Wall $< -o $@
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
|
# added Thu Aug 8 13:44:58 UTC 2024
|
||||||
|
use_envp: use_envp.c Makefile
|
||||||
|
gcc -Wall $< -o $@
|
||||||
|
|
||||||
|
16
code/C/use_envp.c
Normal file
16
code/C/use_envp.c
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/* using envp for fun and profit */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[], char *envp[])
|
||||||
|
{
|
||||||
|
char *cptr;
|
||||||
|
int idx = 0;
|
||||||
|
cptr = envp[idx];
|
||||||
|
while ( NULL != (cptr=envp[idx]) ) {
|
||||||
|
fprintf(stderr, "envp[%d] %p --> %s\n",
|
||||||
|
idx, cptr, cptr);
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,14 +1,10 @@
|
|||||||
/*
|
/*
|
||||||
*
|
|
||||||
* spy_getenv.so: spy_getenv.c Makefile
|
* spy_getenv.so: spy_getenv.c Makefile
|
||||||
* gcc -Wall -shared -fPIC $< -ldl -o $@
|
* gcc -Wall -shared -fPIC $< -ldl -o $@
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#define __USE_GNU
|
#define __USE_GNU
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
|
||||||
@ -18,15 +14,12 @@ char *getenv(char *envname)
|
|||||||
{
|
{
|
||||||
static char *arrow = "--getenv--> ";
|
static char *arrow = "--getenv--> ";
|
||||||
static char *wtf = " --> (nil)";
|
static char *wtf = " --> (nil)";
|
||||||
|
|
||||||
char *content;
|
char *content;
|
||||||
original_getenv orig_getenv;
|
original_getenv orig_getenv;
|
||||||
|
|
||||||
orig_getenv = (original_getenv)dlsym(RTLD_NEXT, "getenv");
|
orig_getenv = (original_getenv)dlsym(RTLD_NEXT, "getenv");
|
||||||
|
|
||||||
write(STDERR_FILENO, arrow, strlen(arrow));
|
write(STDERR_FILENO, arrow, strlen(arrow));
|
||||||
write(STDERR_FILENO, envname, strlen(envname));
|
write(STDERR_FILENO, envname, strlen(envname));
|
||||||
|
|
||||||
content = orig_getenv(envname);
|
content = orig_getenv(envname);
|
||||||
if (NULL != content) {
|
if (NULL != content) {
|
||||||
write(STDERR_FILENO, "=", 1);
|
write(STDERR_FILENO, "=", 1);
|
||||||
@ -35,9 +28,7 @@ if (NULL != content) {
|
|||||||
else {
|
else {
|
||||||
write(STDERR_FILENO, wtf, strlen(wtf));
|
write(STDERR_FILENO, wtf, strlen(wtf));
|
||||||
}
|
}
|
||||||
|
|
||||||
write(STDERR_FILENO, "\n", 1);
|
write(STDERR_FILENO, "\n", 1);
|
||||||
|
|
||||||
return content;
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ Your mileage may vary, film at 11\dots
|
|||||||
\input{chap/video}
|
\input{chap/video}
|
||||||
\input{chap/graphisme}
|
\input{chap/graphisme}
|
||||||
\input{chap/gnuplot}
|
\input{chap/gnuplot}
|
||||||
% \input{chap/print}
|
\input{chap/print}
|
||||||
\input{chap/webcam}
|
\input{chap/webcam}
|
||||||
% \input{chap/SCSI}
|
% \input{chap/SCSI}
|
||||||
\input{chap/X11}
|
\input{chap/X11}
|
||||||
@ -147,7 +147,7 @@ Your mileage may vary, film at 11\dots
|
|||||||
% \input{chap/MINITEL}
|
% \input{chap/MINITEL}
|
||||||
% \input{chap/Raspberry}
|
% \input{chap/Raspberry}
|
||||||
% \input{chap/Fedora}
|
% \input{chap/Fedora}
|
||||||
% \input{chap/IPv6}
|
\input{chap/IPv6}
|
||||||
\input{chap/threads}
|
\input{chap/threads}
|
||||||
\input{chap/IPC}
|
\input{chap/IPC}
|
||||||
\input{chap/dosbox}
|
\input{chap/dosbox}
|
||||||
@ -174,7 +174,7 @@ Your mileage may vary, film at 11\dots
|
|||||||
\input{chap/curses}
|
\input{chap/curses}
|
||||||
% \input{chap/openwrt}
|
% \input{chap/openwrt}
|
||||||
\input{chap/WiFi}
|
\input{chap/WiFi}
|
||||||
% \input{chap/GIT}
|
\input{chap/GIT}
|
||||||
\input{chap/divers}
|
\input{chap/divers}
|
||||||
% \input{chap/peer2peer}
|
% \input{chap/peer2peer}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user