From e0f7aaffe7bc6405acfc3edc5959e55805dd6dad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Schoentgen?= Date: Wed, 7 Feb 2024 16:08:39 +0100 Subject: [PATCH] feat: add la-commande-sleep-pour-windows.md --- .aspell.fr.pws | 14 +++- .../windows/la-commande-sleep-pour-windows.md | 67 +++++++++++++++++++ .../la-commande-sleep-pour-windows.bat | 6 ++ .../snippets/la-commande-sleep-pour-windows.c | 13 ++++ 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 sources/windows/la-commande-sleep-pour-windows.md create mode 100644 sources/windows/snippets/la-commande-sleep-pour-windows.bat create mode 100644 sources/windows/snippets/la-commande-sleep-pour-windows.c diff --git a/.aspell.fr.pws b/.aspell.fr.pws index 817844b..5825a72 100644 --- a/.aspell.fr.pws +++ b/.aspell.fr.pws @@ -1,4 +1,4 @@ -personal_ws-1.1 fr 227 +personal_ws-1.1 fr 239 AVAX Aborted Add @@ -14,6 +14,7 @@ Circle Contabo Cores Crontab.guru +Cygwin D-Link DB DCS @@ -48,6 +49,7 @@ Imports JPEG Joe Keep +L'implémentation Left.svg Lighttpd Linux @@ -87,6 +89,7 @@ RS Rabby Raspberry Raspbian +ReactOS Remove Rpi SFTP @@ -97,6 +100,7 @@ Setup Shaarli Shibuya Symbol +System SystemRescueCD TIA TTY @@ -139,11 +143,14 @@ cliquez configurateur copiez-le cronjob +d'Intervalle days debug deploy deploy.yml dev +diff +diff.c difference double-cliquez débogage @@ -181,6 +188,7 @@ magnet master mod months +méta-données node now obj @@ -188,16 +196,20 @@ older onduleur photo-voltaïque photo-voltaïques +ping.c +pinger plugins présélectionnée py pyserial python-wks-com quality +reactos remote routeur shell size +sleep smallHash smartphones stake diff --git a/sources/windows/la-commande-sleep-pour-windows.md b/sources/windows/la-commande-sleep-pour-windows.md new file mode 100644 index 0000000..1b1b3ff --- /dev/null +++ b/sources/windows/la-commande-sleep-pour-windows.md @@ -0,0 +1,67 @@ +# La commande `sleep` pour Windows + +> En fait, elle n'existe pas. + +Étant donné qu'il n'existe pas de commande `sleep` sur Windows, nous pouvons tenter de l'émuler ou trouver des alternatives. + +## `timeout` + +Windows est livré avec une commande qui s'appelle `timeout`, située dans le dossier "C:\Windows\System32", et qui pourrait faire l'affaire. Par exemple, pour faire une pause de 5 secondes : + +```{literalinclude} snippets/la-commande-sleep-pour-windows.bat + :lines: 3 + :language: batch +``` + +Cependant, bien que cette commande fonctionnera la plupart du temps, il se peut que cette erreur survienne : + +```{code-block} +timeout: invalid time interval ‘/t’ +Try 'timeout --help' for more information. +``` + +Ce problème arrive lorsque Cygwin est installé. Dans ce cas, il s'agira de l'exécutable fourni par Cygwin et non celui de Windows. Ceci est du fait que Cygwin modifie le chemin de recherche des exécutables et prend l'ascendance sur les dossiers du système. Et il s'avère que la version de la commande `timeout` de Cygwin ne prend pas les même arguments. + +Un correctif possible est d'utiliser le chemin complet de l'exécutable : + +```{literalinclude} snippets/la-commande-sleep-pour-windows.bat + :lines: 4 + :language: batch +``` + +--- + +## `ping` + +Il existe une alternative universelle : `ping`. C'est une astuce vieille comme Windows, mais qu'il fallait connaître : + +```{literalinclude} snippets/la-commande-sleep-pour-windows.bat + :lines: 6 + :language: batch +``` + +L'idée, c'est de *pinger* l'adresse locale N fois pour une pause de N secondes. +Comme `ping` utilise un [intervalle de 1 seconde](seconde-d-intervalle) entre chaque essai, il faut utiliser `-n N+1` pour simuler une pause de N secondes. Dans cet exemple, `-n 6` permet donc de faire une pause de 5 secondes. + +### 1 Seconde d'Intervalle ? + +L'implémentation de [ReactOS](https://reactos.org) permet de le vérifier : + +```{literalinclude} snippets/la-commande-sleep-pour-windows.c + :caption: ping.c + :language: c +``` + +--- + +## 🎣 Source + +- [reactos/reactos ping.c](https://github.com/reactos/reactos/blob/893a3c9d030fd8b078cbd747eeefd3f6ce57e560/base/applications/network/ping/ping.c#L145-L155). + +## 📜 Historique + +2024-02-07 +: Déplacement de l'article depuis le [blog](https://www.tiger-222.fr/?d=2019/10/17/16/53/57-la-commande-sleep-pour-windows). + +2020-08-08 +: Premier jet. diff --git a/sources/windows/snippets/la-commande-sleep-pour-windows.bat b/sources/windows/snippets/la-commande-sleep-pour-windows.bat new file mode 100644 index 0000000..b6cf556 --- /dev/null +++ b/sources/windows/snippets/la-commande-sleep-pour-windows.bat @@ -0,0 +1,6 @@ +@echo off + +timeout /t 5 /nobreak > nul +%systemroot%\system32\timeout.exe /t 5 /nobreak > nul + +ping 127.0.0.1 -n 6 > NUL diff --git a/sources/windows/snippets/la-commande-sleep-pour-windows.c b/sources/windows/snippets/la-commande-sleep-pour-windows.c new file mode 100644 index 0000000..0d67f62 --- /dev/null +++ b/sources/windows/snippets/la-commande-sleep-pour-windows.c @@ -0,0 +1,13 @@ +/* Le premier ping, celui nous obligeant à utiliser N+1 */ +Ping(); + +/* Et la boucle : délai 1 sec + N ping */ +i = 1; +while (i < PingCount) +{ + Sleep(1000); + Ping(); + + if (!PingForever) + i++; +}