J’ai rencontré un petit problème. Pour faire ce que je tente, je dois pouvoir entrer des valeurs hexadécimales pures dans l’entrée standard de la ligne de commande (en particulier dans un appel à gets () qui est à l’intérieur du programme) sans utiliser la redirection d’E / S. J’ai généralement du succès en utilisant ctrl + u + nombre pour entrer des caractères ascii équivalant à la valeur hexadécimale saisie, mais je dois être capable de saisir des caractères / backspaces nuls que le terminal ignore ou interprète comme une action plutôt qu’un caractère . Si j’utilise des redirections de tuyaux ou d’E / S, je ne peux pas interagir avec le programme après l’entrée initiale et la fermeture du programme. Quelqu’un aurait-il des idées? Je pense que les solutions possibles sont soit:
Le troisième dont je ne suis même pas sûr est possible ou utile, car je ne suis pas tout à fait sûr de savoir pourquoi le programme ne fonctionne pas s’il reçoit directement des informations autres que la ligne de commande. ou sinon il ne fonctionnera pas. Quelqu’un aurait-il des idées pour l’une de ces trois options, ou d’autres que vous pourriez penser? Je suis déconcerté.
(Oh, aussi, si quelqu’un peut expliquer pourquoi, parfois, ctrl + u + chiffre produit des caractères avec des valeurs hexadécimales complètement différentes du nombre entré, je suis très curieux, mais je ne pense pas que cela m’aidera de toute façon avec mon problème actuel .)
Vous pouvez changer votre tty
en mode raw
(non cuit) et faire passer tous les caractères saisis au programme sans aucun traitement:
$ stty raw $ command ... $ stty -raw
Le clavier est parfaitement capable d’envoyer un octet nul 00
avec Control @ , cependant, il n’y a aucun moyen de le lire en utilisant , assurez-vous de traiter la chaîne caractère par caractère et non en tant que chaîne gets
qui semble être ce que vous utilisez00
est pris comme un terminateur dans le dernier cas.
04
est le contrôle D en mode brut ou Control V Control D en mode cuit
05
est Control E mais peut être intercepté par votre émulateur de terminal, auquel cas vous devez désactiver le raccourci ou utiliser un autre émulateur.
08
est Control H en mode brut ou Control V Control H en mode cuit
74
est simplement t
84
n’est pas un caractère UTF-8 valide. Vous pouvez toujours diriger cet octet vers votre programme avec quelque chose comme:
printf "\204" | command