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