Ecriture de caractères non standard dans la ligne de commande Linux

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:

  1. Trouver un moyen de taper les caractères manuellement et de les conserver
  2. Trouver un moyen d’entrer les caractères dans ce qui n’est pas unicode ou ascii mais sera toujours accepté comme information d’octet
  3. Trouver un moyen de canaliser ou de redirect les entrées du programme interprétées à partir de la ligne de commande, puis le convaincre de redonner immédiatement le contrôle des entrées à la ligne de commande

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 gets qui semble être ce que vous utilisez , assurez-vous de traiter la chaîne caractère par caractère et non en tant que chaîne 00 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