Les ioctl sont des commandes standards envoyées depuis un logiciel vers un driver,
mais avec un contenu qui peut être fortement variable.
Le format en lui même de la fonction ioctl ne doit pas avoir d'impact sur ce genre de message d'erreur.
Tout à fait, un rapide coup d’œil et cela me semble être le cas ici, c'est l'erreur par défaut qui lancée lorsqu'un appel ioctl demandé n'est pas reconnu.
- l'opération unlocked_ioctl appelle ibioctl de sys/osfuncs.c, la liste de commandes comprises se trouvent dans le grand switch case . -
… reste à creuser pour savoir qui provoque cette erreur.
je dirais que ce message d'erreur:
Opération de contrôle d'E / S inappropriée
est le même que celui que j'ai quand j'essaie de faire un printf (en bourne) dans un script
dont stdout à probablement été fermé.
Ah bon, on ne se prend pas juste un SIGPIPE dans les dents dans ce cas là ?
voila si dans mon code il y a un segfault, alors mon programme attrape le signal SIGSEGV et > lance ma fonction void gestionnaire(int num) grace à la fonction sigaction().
Attention, en matière de signaux, on ne peut pas tout faire, consultez la page de man 7 signal pour connaitre les fonctions que vous pouvez utiliser dans un handler.
Mais au bout de combien de temps le noyau va tuer mon processus ?
D'une part, ce n'est pas une question de temps et surtout, il ne va pas tuer votre processus.
Le séquenceur (donc le noyau pour répondre à la deuxième question), va suspendre le processus pour donner la main au code du gestionnaire de signal, puis, reprendre le processus là où vous l'avez laissé.
Dans le cas d'un SIGSEGV vous pouvez entrer dans une boucle infinie, terminez par un abort, quoiqu'il arrive.
Non, si ta source est plus petite que str, le dernier caractère ne sera pas écrit…
et rien ne prouve qu’il vaille '\0'
Man strncpy:
If the length of src is less than n, strncpy() writes additional null bytes
to dest to ensure that a total of n bytes are written.
Donc, si la source est plus petite que la cible, il remplira la cible de 0.
Si elle est égale, le caractère null est inclu.
Sinon, il n'y avait pas assez de place pour copier la source en entier.
#!/bin/shecho"script python ______________>"
cat << EOF | python# This program adds two numbersnum1 = 1.5num2 = 6.3# Add two numberssum = float(num1) + float(num2)# Display the sumprint('The sum of {0} and {1} is {2}'.format(num1, num2, sum))num = 7# uncomment to take input from the user#num = int(input("Enter a number: "))factorial = 1# check if the number is negative, positive or zeroif num < 0: print("Sorry, factorial does not exist for negative numbers")elif num == 0: print("The factorial of 0 is 1")else: for i in range(1,num + 1): factorial = factorial*i print("The factorial of",num,"is",factorial)EOFecho voili voilou
ce qui donne:
script python ______________>
The sum of 1.5 and 6.3 is 7.8
('The factorial of', 7, 'is', 5040)
voili voilou
A noter que le traitement sur répertoires et celui sur fichiers sont bien séparés.
Le test S_ISREG sur stat(2) n'est effectué que dans le premier cas; aussi diff bloque comme sous linux dans le deuxième.
Ce qui m'a fait supposer que ce comportement est voulu par la norme. Mais je ne l'ai pas trouvé énoncé de manière claire.
À compter d'aujourd'hui, celui ou celle qui aura la série continue de dépêches la plus longue
Hum, Il n'y pas eu de dépêches sur la sortie de FreeBSD-12, ni sur les autres BSD, d'ailleurs. Je peux faire long.
L'accès et le contrôle sur tout ?
Oui. Sur tout. Le domaine linuxfr.org, nos comptes TuxFamily ou GitHub par exemple, les accès root sur > nos serveurs physiques dans deux datacenters,
Enfin! Enfin, on pourra installer le bousin sur un vrai OS de qualité.
et sur nos conteneurs lxc,
'connais pas, on collera le tout dans des jails ZFS.
Comme l'explique Gérald, un shell va exécuter ce qui se trouve entre entre les $( … ), ou sous son autre forme, entre des apostrophes.
` commandes à exécuter `
david:~>cat commandes
ls -l commandes
echo coucou
david:~>`grep "ls" commandes`
-rw-r--r-- 1 david wheel 2930 mars 09:16 commandes
Par contre, si sous un terminal le presse-papier n'existe pas stricto-sensu, le copier-coller existe, lui.
Il faut sélectionner un texte avec la souris et le coller en appuyant sur le bouton droit (ou milieu, ou les deux boutons selon les OS) voire avec la séquence ctrl-insert.
Pour que cela fonctionne sous vim, il faut configurer la souris en mode visual:
:set mouse=v
sur un fichier, peut-être, mais comment il fait ça avec un flux sur stdin
(dont la taille est potentiellement plus large que tout la mémoire disponible pour le système) ?
Il s'agit alors d'une pipe dont la taille des buffers sera limitée à 64K (4K de base, soit une page, de mémoire). tail va, lui, créer une chaîne de buffer, chacun limité, il me semble, au BUFSIZ de stdio.
( 1KB, je crois )
Donc, oui, tail doit attendre la fin du flux et ça peut devenir un problème.
Mais ce cas est hautement improbable avec notre sortie de ls;
mieux, si ce risque existe, un faut revoir complètement le principe, le nœud problème se situant alors en amont de tail ou de head, AMHA.
ls trie par défaut par ordre alphabétique, il suffit donc d'extraire avec cut la partie située entre les deux points du dernier élément ( tail ) et de l’incrémenter. Le test est là pour pouvoir créer un premier fichier, ls renvoie une erreur dans ce cas.
ex: touch `./ceScript.sh`
L'inconvénient est que l'on repart à zéro si le fichier d'index est perdu, mais l'on peut ajouter des contrôles pour éviter d'écraser un fichier déjà existant.
L'avantage est que l'on garde l'indexation même si les derniers fichiers sont effacés, ce qui va créé des trous.
C'est généralement ce cas là que j'utilise dans mes scripts, combiné avec une recherche en cas de doute ou d'erreur comme la demande de création d'un fichier existant.
[^] # Re: regardez plutôt du coté du driver, ou des sources de l'appli
Posté par David Marec . En réponse au message [Debian] : Améliorer ioctl.h pour communication non-standard. Évalué à 2.
Tout à fait, un rapide coup d’œil et cela me semble être le cas ici, c'est l'erreur par défaut qui lancée lorsqu'un appel
ioctl
demandé n'est pas reconnu.- l'opération
unlocked_ioctl
appelleibioctl
desys/osfuncs.c
, la liste de commandes comprises se trouvent dans le grandswitch case
. -… reste à creuser pour savoir qui provoque cette erreur.
[^] # Re: descripteur fermé?
Posté par David Marec . En réponse au message [Debian] : Améliorer ioctl.h pour communication non-standard. Évalué à 2.
Ah bon, on ne se prend pas juste un
SIGPIPE
dans les dents dans ce cas là ?[^] # Re: .
Posté par David Marec . En réponse au message [licences] BSD-3 pour un projet perso?. Évalué à 3. Dernière modification le 15 avril 2019 à 19:53.
Par exemple, je n'utilise que la BSD-2 clause pour ma part, pour à peu près tout ce qui n'est pas en lien avec mon activité professionnelle.
Il suffit de mettre son nom dans le copyright.
La clause n°3 a du être abandonnée partout, maintenant.
[^] # Re: Fève ou grain
Posté par David Marec . En réponse au journal Toileharicot 11 est dehors. Évalué à 4.
C'est con, on aurait pu faire «graine de lin», du coup.
Bon, «filet de fayot» alors ?
# sequenceur
Posté par David Marec . En réponse au message combien de temps se passe entre l'émission d'un SIGSEV et SIGKILL. Évalué à 4.
Attention, en matière de signaux, on ne peut pas tout faire, consultez la page de
man 7 signal
pour connaitre les fonctions que vous pouvez utiliser dans un handler.D'une part, ce n'est pas une question de temps et surtout, il ne va pas tuer votre processus.
Le séquenceur (donc le noyau pour répondre à la deuxième question), va suspendre le processus pour donner la main au code du gestionnaire de signal, puis, reprendre le processus là où vous l'avez laissé.
Dans le cas d'un
SIGSEGV
vous pouvez entrer dans une boucle infinie, terminez par unabort
, quoiqu'il arrive.[^] # Re: Retour de fonction
Posté par David Marec . En réponse au sondage De quelle pratique de développement avez‐vous honte ?. Évalué à 3.
Man strncpy:
Donc, si la source est plus petite que la cible, il remplira la cible de
0
.Si elle est égale, le caractère
null
est inclu.Sinon, il n'y avait pas assez de place pour copier la source en entier.
[^] # Re: avec cat << EOF
Posté par David Marec . En réponse au message Introduire un script python dans un script shell. Évalué à 3.
… technique du «here-doc».
Le principe se comprend mieux avec
cat
( enfin, j'espère ).En pratique, c'est utilisé pour, justement, utiliser des variables du shell. Sinon, l'intérêt est limité.
# avec cat << EOF
Posté par David Marec . En réponse au message Introduire un script python dans un script shell. Évalué à 3.
en utilisant l'astuce
cat << EOF
ce qui donne:
J'ai pris des exemples au pif
[^] # Re: Retour de fonction
Posté par David Marec . En réponse au sondage De quelle pratique de développement avez‐vous honte ?. Évalué à 3.
Oui, un test utile serait le le suivant:
[^] # Re: Une petite étape en plus
Posté par David Marec . En réponse à la dépêche Bogue, fonctionnalité, mauvais usage ? Un cas pratique. Évalué à 3.
Et sous FreeBSD,
A noter que le traitement sur répertoires et celui sur fichiers sont bien séparés.
Le test
S_ISREG
sur stat(2) n'est effectué que dans le premier cas; aussidiff
bloque comme sous linux dans le deuxième.Ce qui m'a fait supposer que ce comportement est voulu par la norme. Mais je ne l'ai pas trouvé énoncé de manière claire.
[^] # Re: La FSF m'a répondu, il n'a pas les droits.
Posté par David Marec . En réponse au journal Festival d'installation : Jusqu'où et comment pactiser avec le diable ?. Évalué à 7.
Attendons qu'ils demandent d'activer le fameux article 13 de la toute récente directive européenne.
[^] # Re: table rase
Posté par David Marec . En réponse à la dépêche L’ultime challenge LinuxFr.org. Évalué à 4.
ha! Je m'en vais de ce pas faire un
svndiff sur/usr/src
.[^] # Re: Mwai, sans moi
Posté par David Marec . En réponse à la dépêche L’ultime challenge LinuxFr.org. Évalué à 6.
Non,
::1/128
.# table rase
Posté par David Marec . En réponse à la dépêche L’ultime challenge LinuxFr.org. Évalué à 10.
Hum, Il n'y pas eu de dépêches sur la sortie de FreeBSD-12, ni sur les autres BSD, d'ailleurs. Je peux faire long.
Enfin! Enfin, on pourra installer le bousin sur un vrai OS de qualité.
'connais pas, on collera le tout dans des jails ZFS.
[^] # Re: simple :)
Posté par David Marec . En réponse au message [Résolu]Copier ou éxécuter un résultat de commande shell (stdout). Évalué à 1. Dernière modification le 30 mars 2019 à 09:22.
Comme l'explique Gérald, un shell va exécuter ce qui se trouve entre entre les
$( … )
, ou sous son autre forme, entre des apostrophes.Par contre, si sous un terminal le presse-papier n'existe pas stricto-sensu, le copier-coller existe, lui.
Il faut sélectionner un texte avec la souris et le coller en appuyant sur le bouton droit (ou milieu, ou les deux boutons selon les OS) voire avec la séquence
ctrl-insert
.Pour que cela fonctionne sous vim, il faut configurer la souris en mode visual:
:set mouse=v
[^] # Re: Expressivité
Posté par David Marec . En réponse au journal Les 7 étapes pour devenir un programmeur Go.. Évalué à 2. Dernière modification le 25 mars 2019 à 13:05.
Il faudrait expliquer en quoi
v
représente une paire en python.A vue de nez, c'est un tableau à au moins deux éléments.
Si le dictionnaire contient des paires, non.
# Grmbl
Posté par David Marec . En réponse au message Promo chez Unixstickers. Évalué à 5.
Se nommer UnixSticker et ne pas proposer le moindre ×BSD, si ce n'est qu'un petit échantillon dans le pack Ultimate …
# Retour de fonction
Posté par David Marec . En réponse au sondage De quelle pratique de développement avez‐vous honte ?. Évalué à 3. Dernière modification le 18 mars 2019 à 13:13.
A mettre dans la même catégories que "ne pas gérer la mémoire".
{str|mem}cpy
et cie.[^] # Re: moi
Posté par David Marec . En réponse au message bash : créer des fichiers numérotés successifs. Évalué à 2.
Il s'agit alors d'une pipe dont la taille des buffers sera limitée à 64K (4K de base, soit une page, de mémoire).
tail
va, lui, créer une chaîne de buffer, chacun limité, il me semble, auBUFSIZ
destdio
.( 1KB, je crois )
Donc, oui,
tail
doit attendre la fin du flux et ça peut devenir un problème.Mais ce cas est hautement improbable avec notre sortie de
ls
;mieux, si ce risque existe, un faut revoir complètement le principe, le nœud problème se situant alors en amont de
tail
ou dehead
, AMHA.[^] # Re: moi
Posté par David Marec . En réponse au message bash : créer des fichiers numérotés successifs. Évalué à 2.
Non, pas lorsque l'entrée est un fichier standard.
tail
remplit un buffer en remontant depuis la fin du fichier, puis le parcours à la recherche d'une fin de ligne en marche arrière à coup de memrch.[^] # Re: Le code semble correct mais…
Posté par David Marec . En réponse au message probleme if. Évalué à 2.
Non, tant que le shell utilisé n'est précisé, ce code n'est pas correct.
[^] # Re: moi
Posté par David Marec . En réponse au message bash : créer des fichiers numérotés successifs. Évalué à 2. Dernière modification le 17 mars 2019 à 12:21.
Voire, inutile de demander un
-r
à ls, utilisertail
plutôt quehead
à la place.donne la valeur, si le format de fichier est
nnnn.YYYY
# IPCs
Posté par David Marec . En réponse au message probleme de compréhension avec la socket (local). Évalué à 2.
En fait, non.
Je n'ai pas compris si le comportement des sockets, soit deux flux différents en lecture et écriture, vous convient ou pas.
Si oui, et que vous souhaitez communiquer entre deux process locaux, utiliser les sockets UNIX, plutôt que TCP ou UDP, voire une socketpair.
Si non, regardez du coté des shared memory (
shm
).# Recherche du dernier
Posté par David Marec . En réponse au message bash : créer des fichiers numérotés successifs. Évalué à 2. Dernière modification le 17 mars 2019 à 11:16.
La deuxième solution est la recherche du dernier index crée, que l'on peut voir comme un complément
au fichier d'index.
ls trie par défaut par ordre alphabétique, il suffit donc d'extraire avec cut la partie située entre les deux points du dernier élément ( tail ) et de l’incrémenter. Le test est là pour pouvoir créer un premier fichier, ls renvoie une erreur dans ce cas.
ex:
touch
sh ./ceScript.sh# Fichier d'index
Posté par David Marec . En réponse au message bash : créer des fichiers numérotés successifs. Évalué à 2. Dernière modification le 17 mars 2019 à 10:51.
En ce qui concerne le deuxième cas, si on maîtrise l'environnement, on peut utiliser stocker dans un fichier le dernier index fourni:
ex:
touch `./ceScript.sh`
L'inconvénient est que l'on repart à zéro si le fichier d'index est perdu, mais l'on peut ajouter des contrôles pour éviter d'écraser un fichier déjà existant.
L'avantage est que l'on garde l'indexation même si les derniers fichiers sont effacés, ce qui va créé des trous.
C'est généralement ce cas là que j'utilise dans mes scripts, combiné avec une recherche en cas de doute ou d'erreur comme la demande de création d'un fichier existant.