fallo en la practica
hola a todos, estoy intentando hacer una practica en C que consiste en tener varios pcs con dos puertos serie cada uno , al escribir caracteres en uno de ellos debe aparecer por pantalla en todos(él incluido). El programa se ejecuta en cada uno de ellos bajo linux. El programa acaba al pulsar escape o esta 10 segundos sin hacer nada. Yo la e implenemtado de la forma que muestro a continuacion pero no consigo que funcione, si me podeis ayudar os lo agradezco mucho porque yo ya no se que mas hacer..
# include <unistd.h>
# include <stdio.h>
# include <string.h>
# include <sys/stat..h>
# include <fcntl.h>
# include <termios.h>
#define MODEMDEVICE 0 "/dev/ttys0"
#define MODEMDEVICE 1 "/dev/ttys1"
#define TRUE 1
#define FALSE 0
#define STDINFD 0
#define MAX 256
#define ESC 27
#define TIMEOUT 10
int main(int argc, char *argv[ ])
{
fd_set, rdset, wset;
struct termios, com0, com1, defaulconfcon0, defaultconfcon1;
xhar ibuffer[MAX] , obuffer[MAX], line[MAX];
int n, i , fline;
int ret , ttys0fd , ttys1fd;
int terminar = FALSE, imprimr = FALSE;
/* abrimos el puerto serie 0 para lectura/escritura */
if((ttys0fd = open(MODEMDEVICE0, O_RDWR | O_NOCTTY ))==-1){
perror("ERROR al abrir el puerto serie 0n");
exit(-1);
}
/* abrimos el puerto serie 1 para lectura/escritura */
if((ttys1d = open(MODEMDEVICE1,O_RDWR | O_NOCTTY ))==-1){
perror("ERROR al abrir el puerto serie 1n");
exit(-1);
}
printf ("Programa puerto serie bajo LINUXn");
printf("Escriba y pulse ENTER para mandar lo caracteres n");
/* Obtenemos la configuracion original del puerto serie y la guardamos */
tcgetattr(ttysofd, &defaultconfcon0);
tcgetattr(ttys1fd, &defaulconfcon1);
/* configuramos el puerto serie 0 */
bzero(&con0, sizeof (com0));
com0.c_iflag = IGNPAR:
com0.c_cflag = CS8| CREAD | CLOCAL;
cfsetospeed (&com0, B9600);
cfsetispeed(&com0, B9600);
if(tcsetattr(ttys0fd, TCSANOW, &com0))
perrror("ERROR al configurar el puerto serie 0n");
/* configuramos el puerto serie 1*/
bzero(&com1, sizeof(com1));
com1.c_iflag = IGNPAR;
com1.c_cflag = CS8 | CREAD | CLOCAL;
cfsteospeed(&com1, B9600);
cfsetispeed(&com1, B9600);
if(tsetattr(ttys1fd, TCSANOW, &com1))
perror("ERROR al configurar el puerto serie 1/n");
do{
/* incluimos los descriptores de archivo de la salida estandar */
/* y del puerto serie en el conjunto de descriptores de lectura y */
/* establecemos timeout de 10 segundos para select*/
FD_ZERO (&rdset);
FD_ZERO(&wset);
FD_SET(ttys0fd, &rdset);
FD_SET(ttys1fd, &wdset);
tv.tv_sec = TIMEOUT;
tv.tv_usec = 0;
ret = select (ttys0fd + 1, &rdset, &wdset, NULL, &tv);
/* miramos si es posible escribir inmediatamente en el descriptor*/
if (FD_ISSET(ttysd1, &wdset)){
n = read(ttys0fd, &ibuffer, MAX);
ibuffer[n] = ' ';
printf("Ususario com0 dice : %sn", ibuffer);
terminar = FALSE;
} // fin del if
/* miro si hay caracteres disponibles para la lectura*/
if(FD_ISSET(ttys1fd, &rdset)){
n = read(ttys0fd, &ibuffer, MAX);
ibuffer[n] = ' ';
printf("Usuario com1 dice :%sn", ibuffer);
terminar = FALSE;
}
if (FD_ISSET(STDINFD, &rdset){
n = read(STDINFD, &buffer, MAX);
ibuffer[n] = ' ';
/* enviar secuencia de caracteres al descriptor serie*/
n = write(ttys1fd, &ibuffer, MAX);
printf("Usuario teclado dice : %Sn", ibuffer);
terminar = FALSE;
}
if (ret == -1){
perror ("ERROR en select()n");
terminar = TRUE;
}
if (ret ==0){
printf("Tiempo de espera excedidon");
terminar = TRUE;
}
} while(terminar ==FALSE);
if (tcsetattr(ttys0fd, TCSANOW, &defalutconfcon0))
perror("ERROR, al restaurar la configuracion original del puerton");
if(tcsetattr(ttys1fd, TCSANOW, &defaultconfcon1))
perror("ERROR, al restaurar ls configuracion original del puerton");
printf("ntttSALIDAn");
}
# include <unistd.h>
# include <stdio.h>
# include <string.h>
# include <sys/stat..h>
# include <fcntl.h>
# include <termios.h>
#define MODEMDEVICE 0 "/dev/ttys0"
#define MODEMDEVICE 1 "/dev/ttys1"
#define TRUE 1
#define FALSE 0
#define STDINFD 0
#define MAX 256
#define ESC 27
#define TIMEOUT 10
int main(int argc, char *argv[ ])
{
fd_set, rdset, wset;
struct termios, com0, com1, defaulconfcon0, defaultconfcon1;
xhar ibuffer[MAX] , obuffer[MAX], line[MAX];
int n, i , fline;
int ret , ttys0fd , ttys1fd;
int terminar = FALSE, imprimr = FALSE;
/* abrimos el puerto serie 0 para lectura/escritura */
if((ttys0fd = open(MODEMDEVICE0, O_RDWR | O_NOCTTY ))==-1){
perror("ERROR al abrir el puerto serie 0n");
exit(-1);
}
/* abrimos el puerto serie 1 para lectura/escritura */
if((ttys1d = open(MODEMDEVICE1,O_RDWR | O_NOCTTY ))==-1){
perror("ERROR al abrir el puerto serie 1n");
exit(-1);
}
printf ("Programa puerto serie bajo LINUXn");
printf("Escriba y pulse ENTER para mandar lo caracteres n");
/* Obtenemos la configuracion original del puerto serie y la guardamos */
tcgetattr(ttysofd, &defaultconfcon0);
tcgetattr(ttys1fd, &defaulconfcon1);
/* configuramos el puerto serie 0 */
bzero(&con0, sizeof (com0));
com0.c_iflag = IGNPAR:
com0.c_cflag = CS8| CREAD | CLOCAL;
cfsetospeed (&com0, B9600);
cfsetispeed(&com0, B9600);
if(tcsetattr(ttys0fd, TCSANOW, &com0))
perrror("ERROR al configurar el puerto serie 0n");
/* configuramos el puerto serie 1*/
bzero(&com1, sizeof(com1));
com1.c_iflag = IGNPAR;
com1.c_cflag = CS8 | CREAD | CLOCAL;
cfsteospeed(&com1, B9600);
cfsetispeed(&com1, B9600);
if(tsetattr(ttys1fd, TCSANOW, &com1))
perror("ERROR al configurar el puerto serie 1/n");
do{
/* incluimos los descriptores de archivo de la salida estandar */
/* y del puerto serie en el conjunto de descriptores de lectura y */
/* establecemos timeout de 10 segundos para select*/
FD_ZERO (&rdset);
FD_ZERO(&wset);
FD_SET(ttys0fd, &rdset);
FD_SET(ttys1fd, &wdset);
tv.tv_sec = TIMEOUT;
tv.tv_usec = 0;
ret = select (ttys0fd + 1, &rdset, &wdset, NULL, &tv);
/* miramos si es posible escribir inmediatamente en el descriptor*/
if (FD_ISSET(ttysd1, &wdset)){
n = read(ttys0fd, &ibuffer, MAX);
ibuffer[n] = ' ';
printf("Ususario com0 dice : %sn", ibuffer);
terminar = FALSE;
} // fin del if
/* miro si hay caracteres disponibles para la lectura*/
if(FD_ISSET(ttys1fd, &rdset)){
n = read(ttys0fd, &ibuffer, MAX);
ibuffer[n] = ' ';
printf("Usuario com1 dice :%sn", ibuffer);
terminar = FALSE;
}
if (FD_ISSET(STDINFD, &rdset){
n = read(STDINFD, &buffer, MAX);
ibuffer[n] = ' ';
/* enviar secuencia de caracteres al descriptor serie*/
n = write(ttys1fd, &ibuffer, MAX);
printf("Usuario teclado dice : %Sn", ibuffer);
terminar = FALSE;
}
if (ret == -1){
perror ("ERROR en select()n");
terminar = TRUE;
}
if (ret ==0){
printf("Tiempo de espera excedidon");
terminar = TRUE;
}
} while(terminar ==FALSE);
if (tcsetattr(ttys0fd, TCSANOW, &defalutconfcon0))
perror("ERROR, al restaurar la configuracion original del puerton");
if(tcsetattr(ttys1fd, TCSANOW, &defaultconfcon1))
perror("ERROR, al restaurar ls configuracion original del puerton");
printf("ntttSALIDAn");
}
