PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lesen bidde: Was machen grantpt und unlockpt?



7.e.Q
20-10-2004, 06:00
Hi!

Daß getpt nichts anderes macht, als "/dev/ptmx" öffnen und den Filedeskriptor zurück liefern und ptsname ein ioctl(fd,TIOCGPTN,&pty) auf einem mit getpt geöffneten PTY und dann ein Character Array im Format ("/dev/pts/%i",pty) zurückliefert, ist mir mittlerweile bekannt.

Aber!!! :rolleyes:

Was machen grantpt und unlockpt mit dem Filedeskriptor? Irgendwelche IOCTLs mit Sicherheit. Aber welche??? :confused: :confused: :confused:

7.e.Q
20-10-2004, 06:43
Mei was ein Akt... Hab's hinbekommen. Also wer's genau wissen will:



int getpt()
{
int newfd = open("/dev/ptmx",O_RDWR | O_NOCTTY);
return newfd;
}

char *ptsname(int fd)
{
char buf[256];
int pty;
ioctl(fd,TIOCGPTN,&pty);
sprintf(buf,"/dev/pts/%i",pty);
return buf;
}

int grantpt(int fd)
{
// entspricht nicht den Angaben aus der Manpage!
umask(000);
fchmod(fd,0777);
chmod(ptsname(fd),0777);
return 0;
// Wer mag, kann die Funktion ja der Manpage entsprechend umbauen
}

int unlockpt(int fd)
{
int flag=0;
ioctl(fd,TIOCSPTLCK,&flag);
return 0;
}


Wobei ich mich bei grantpt nicht 100% an die Spezifikation aus der Man-Page gehalten hab (ich weiß, ich weiß... RTFM). In meiner Variante der Funktion bekommt jeder vollen Zugriff auf die Master- und die Slave-Seite. Das kann von Vor-, aber auch von Nachteil sein, sicherheitstechnisch. Vielleicht macht sich ja jemand die Mühe und baut die Funktion nach den Spezifikationen nochmal nach. :cool: