J'ai écrit une application en C++ qui transmet des messages radio en écrivant sur un modem connecté au port série. Pour ce faire, je dois obtenir un descripteur de fichier en utilisant le code du formulaire.
fd1=open(“/dev/ttyS0″, O_RDWR | O_NOCTTY | O_NDELAY);
Cela m'a rendu curieux de connaître la nature des éléments de/dev. Pour essayer de me faire une idée du contenu de ces articles, j’ai essayé un
Sudo cat /dev/ttyS0
seulement pour recevoir le message
cat: /dev/ttyS0: Input/output error
ce qui n'a pas aidé ma compréhension du tout. S'agit-il réellement d'un fichier ou simplement d'une sorte de lien permettant d'accéder à la fonctionnalité du pilote?
Tout sous Linux est un fichier ou un répertoire. Les éléments contenus dans /dev
sont des fichiers spéciaux.
La majorité des périphériques sont des périphériques de type bloc ou caractère; Cependant, d'autres types de périphériques existent et peuvent être créés. En règle générale, les "périphériques en mode bloc" sont des périphériques qui stockent ou conservent des données. Les "périphériques en mode caractère" peuvent être considérés comme des périphériques qui transmettent ou transfèrent des données. Par exemple, les lecteurs de disquette, les disques durs et les lecteurs de CD-ROM sont tous des périphériques en mode bloc, alors que les ports série, les souris et les ports d’imprimerie parallèles sont tous des périphériques avec des caractères. Il existe un schéma de nommage, mais dans la grande majorité des cas, il est complètement illogique.
Les périphériques sont définis par type, tels que "bloc" ou "caractère", et "majeur" et "mineur". Le numéro majeur est utilisé pour classer un périphérique et le numéro mineur pour identifier un type de périphérique spécifique. Par exemple, tous les périphériques IDE connectés au contrôleur principal ont un nombre majeur de 3. Les périphériques maîtres et esclaves, ainsi que les partitions individuelles, sont définis plus avant par l'utilisation de nombres mineurs.
Extrait de Linux-Filesystem-Hierarchy
2 options:
Essayer
cat < /dev/ttyS0
et voir si cela fonctionne.
Vous pouvez résoudre cette erreur en ajoutant votre utilisateur au même groupe (c.-à-d. dialout
).
De Le projet de documentation Linux :
L'ordinateur considère chaque port série comme un "périphérique". On l'appelle parfois un terminal car, à une époque, les terminaux étaient l'utilisation la plus courante d'un port série. Pour chaque port série de ce type, il existe un fichier spécial dans le répertoire/dev (périphérique)./dev/ttyS0) est le fichier spécial du port série appelé COM1 dans le monde DOS/Windows.
Pour envoyer du texte à un terminal, vous pouvez rediriger la sortie standard d’une commande de ligne de commande vers le fichier spécial approprié. Par exemple, en tapant "echo test>/dev/ttyS1" dans la commande Invite, le mot "test" doit être envoyé au terminal sur ttyS1 (COM2), à condition que vous disposiez de l'autorisation en écriture sur/dev/ttyS1. De même, en tapant "cat my_file>/dev/ttyS0", le contenu du fichier my_file sera envoyé à COM1 (ttyS0).