radigan@smu (09/27/87)
HELP HELP HELP The following program uses a null modem between 2 rs232 ports on a Sun 3.. All I want to do is send charaters at a time but this does not work The second write read will show that the second char written is in wbuff[1] rather than wbuff[0]. I am in raw mode and there is no buffering ? If I open and close fd1 and fd2 in between all is OK FOR 64 dollars .. do you see anything wrong here ? P.S I have several other versions that instantly crash a sun 3 ... its fun to watch for the whole family #include "/usr/include/sys/file.h" #include "/usr/include/sys/ioctl.h" #include <stdio.h> struct sgttyb my_parms1, tmp_parms1, my_parms2, tmp_parms2; void set_raw(fd) { ioctl(fd,TIOCGETP, &my_parms1); my_parms1.sg_flags |= RAW; my_parms1.sg_flags |= LITOUT; my_parms1.sg_flags |= FLUSHO; my_parms1.sg_flags |= ~ECHO; ioctl(fd,TIOCSETP, &my_parms1); } main() { int f = O_RDWR ,m= 0777; unsigned char buff[20]; char *n1 = "/dev/ttya" ,*n2 = "/dev/ttyb"; char c; int fd1,fd2,i; extern int errno; char wbuff[128]; int cc; if((fd1 = open(n1,f,m)) == -1){ return; } else{ set_raw(fd1); } if( (fd2 = open(n2,f,m)) == -1){ return; } else{ set_raw(fd2); } buff[0] = 0xFF; if ( write(fd1,buff,1 ) == 0){ return; } if( (cc = read(fd2,buff,1)) == 0){ return; } printf("\n read 1 --->%x<<< \n", buff[0]); printf(" %d\n",ioctl(fd1,TIOCFLUSH,0)); wbuff[0] = 7; if ( write(fd2,wbuff,1 ) == 0){ return; } if( (cc = read(fd1,wbuff,1)) == 0){ return; } printf("\n read 2--------->%x %x %x %x<----\n",wbuff[0],wbuff[1],wbuff[2],wbuff[3]); exit(0); }