Comment puis-je lire des données à partir du port série sous Linux à l'aide de C?
Je suis nouvelle série de la programmation sous Linux à l'aide de C. j'ai trouvé un petit morceau de code pour écrire des données sur le port série qui je partage ici. Après l'exécution de ce code, je l'ai peut supposer que les données écrites sur un port spécifique. Maintenant, je voudrais ouvrir un autre terminal et à l'aide de séparer le code souhaitez lire les données écrites sur le port - comment dois-je faire?
#include <stdio.h> /* Standard input/output definitions */
#include <string.h> /* String function definitions */
#include <unistd.h> /* UNIX standard function definitions */
#include <fcntl.h> /* File control definitions */
#include <errno.h> /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */
/*
* 'open_port()' - Open serial port 1.
*
* Returns the file descriptor on success or -1 on error.
*/
int
open_port(void)
{
int fd; /* File descriptor for the port */
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
/* Could not open the port. */
perror("open_port: Unable to open /dev/ttyS0 - ");
}
else
fcntl(fd, F_SETFL, 0);
n = write(fd, "ATZ\r", 4);
if (n < 0)
fputs("write() of 4 bytes failed!\n", stderr);
return (fd);
}
Le code ci-dessus va écrire les données sur un port spécifique.
Notez que la fonction d'écriture peut (en théorie) de retour de 3 pour indiquer qu'il a écrit 3 des 4 octets avec succès. Vous pouvez décider de traiter une courte écrire " comme une erreur ou si pour recommencer à écrire le résidu de la mémoire tampon.
OriginalL'auteur Amit Singh Tomar | 2011-12-22
Vous devez vous connecter pour publier un commentaire.
En théorie, tout ce que vous avez à faire est d'ouvrir le port pour la lecture, et l'utilisation
read()
pour obtenir les données.Il y a des différences, notamment, la lecture a besoin d'un tampon à mettre les données. Le code ci rejette le premier message lu. Notez qu'un court de lecture indique simplement qu'il y a moins de données disponibles que ce qui est demandé au moment de la lecture terminée. Il ne signifie pas automatiquement une erreur. Pensez à une ligne de commande; certaines commandes peut-être un ou deux caractères (
ls
) où d'autres peuvent être très complexes (find /some/where -name '*.pdf' -mtime -3 -print
). Le fait que le même tampon est utilisé pour lire les deux n'est pas un problème; unread
donne 3 caractères (retour à la ligne est inclus), les autres 47.C'est là où la pratique est dans la manière de la théorie. À lire depuis le port, il doit y avoir un gadget connecté au port qui écrit les données pour vous de lire. Donc, vous avez à vous soucier du matériel, de l'autre côté du port; la façon dont il va réagir à des données écrites par l'ordinateur, et la façon dont il va écrire des données pour l'ordinateur à lire.
Vraiment @Jonathan la façon dont je me rapproche est juste Linux et d'essayer de communiquer à l'aide du terminal .Sur un terminal suis en train d'écrire des données sur le port et sur d'autres terminaux d'essayer de la lire ,de la même façon commencé Linux apprentissage de la programmation socket, Mais maintenant sa ressemble j'ai besoin d'un câble série ainsi et deux machine .De toute façon Jonathan je vous Remercie beaucoup de douceur à l'aide!!
Ce n'est pas très bien fonctionner dans la plupart des cas sans configuration le port - vitesse de transmission, traduction, etc.
hmm...oui, vous avez probablement raison. Vous pouvez rapidement obtenir dans beaucoup de code spécifique au système d'alors. Vous avez certainement besoin de savoir quels sont les paramètres à partir de quelque part pour utiliser les fonctions de
<termios.h>
correctement (au moins certaines parties qui ne sont pas spécifiques à un système d' — mais si, vous devez définir le débit en bauds, par exemple, vous avez besoin de savoir quel est le débit en bauds pour définir le numéro de série de l'appareil que vous avez ouvert).OriginalL'auteur Jonathan Leffler
Le programme affiché fait beaucoup de suppositions sur l'état du port. Dans une application réelle, vous devriez faire tout ce qui est important programme d'installation de manière explicite. Je pense que la meilleure source d'apprentissage port série de la programmation sous POSIX est le
Série Guide de Programmation POSIX Systèmes d'Exploitation
Je suis recopie ici: https://www.cmrr.umn.edu/~strupp/serial.html
Merci pour le heads up. J'ai configuré une copie miroir sur mon serveur.
la page principale est en miroir, mais tous les liens vers les sous-pages semblent être morts. Je peux trouver le contenu ici: cmrr.umn.edu/~strupp/serial.html
Ce document n'a pas de sous-pages. C'est juste un long fichier HTML. Le problème, c'est que les liens dans la table des matières inclus un nom de fichier
serial.html
au lieu de la simple à l'intérieur du document ancres. J'ai changé les liens dans le code HTML de tels intra document ancres.OriginalL'auteur datenwolf