AIX + tty1
Dennis Wetzig
dennis at bilbo.iok.net
Wed Nov 10 16:55:31 CET 1999
> > > Ich habe folgendes Problem:
> > >
> > > ich will die 2. tty (rs232) Schnittstelle einer RS6000 fuer ein
> > > Zahlungstermial nutzten welches ein eigenes Protokoll hat.
> > > Auf der Schnittstelle laeft kein getty oder aehnliches.
> > >
> > > - der open ("/dev/tty1",R_RDWR) bleibt haengen , warum
> > > - ein ls > /dev/tty1 bleibt ebenfalls hengen
> > > - ein open mit O_RDWR|O_NDELAY geht durch, dann bekomme ich beim read
> > > den fehler "EAGAIN 11 /* Resource temporarily unavailable */"
> > >
> > > Weiss jemand hier weiter ?
> >
Schau Dir mal termios an.
Du solltest die Schnittstelle in den non-cannonical mode bringen und
termios.c_cc[VTIME]=0 und termios.c_cc[VMIN] irgendwas > 0 setzen.
VMIN gibt an, wieviele bytes ein read() mindestens zur"uckgeben muss,
VTIME den dazugeh"origen Timeout in Zehntel-Sekunden an.
Dein read() kommt also mit errno=11 zur"uck, weil es einen VTIME bedingten
Timeout gegeben hat.
Ich habe mal ein Programm geschrieben, das mit einem Modem ueber ein tty im
non-canonical mode spricht, und unter anderem dieses gemacht:
[...]
struct {
struct termios t;
int fd;
int changed;
} t_orig;
[...]
if(tcgetattr(i_dev, &t_orig.t)==0) {
t_orig.fd=i_dev;
t=t_orig.t;
t.c_iflag&= ~(BRKINT|ICRNL|INPCK|ISTRIP|IXON);
t.c_oflag&= ~(OPOST);
t.c_lflag&= ~(ECHO|ICANON|IEXTEN|ISIG);
t.c_cc[VMIN]=1;
t.c_cc[VTIME]=0;
if(tcsetattr(i_dev, TCSANOW, &t)==0)
t_orig.changed=1;
}
[...]
Ich hoffe, dass Dich das auf den richtigen Weg bringt ;-)
Bis dann,
Dennis
More information about the Linux
mailing list