Hallo Matthias,
On Sun, Jan 13, 2002 at 09:16:09PM +0100, Matthias Petermann wrote:
fd = open("/dev/tty", O_RDONLY | O_NONBLOCK); err = ioctl(fd, TIOCGWINSZ, &win);
Allerdings hab ich nirgends gelesen, ob ich das tty einfach so öffnen darf, wie ich das hier getan habe. Skeptisch bin ich vor allem geworden, da bei mir der 'fd' nach open den Wert 3 hat. Wenn ich allerdings für 'fd' in der ioctl- Anweisung einfach 0 eintrage, funktioniert das Programm trotzdem. Irgendwo im Netz habe ich ein ähnliches Beispiel gefunden, wo nur eine feste 0 in ioctl stand. Ist 0 ein standardmäßig geöffneter Dateidescriptor auf das Terminal?
Wie Konrad schon schrieb, ist die 0 die Standardeingabe des Prozesses. Diese ist nicht notwendigerweise identisch mit dem Terminal (Stichwort: E/A-Umleitung). /dev/tty ist das dem Prozess zugeordnete Terminal. Ich wuerde empfehlen, den Rueckgabewert von open auf Fehler zu testen, falls das Programm mal ohne Terminal laufen sollte (z.B. von cron o.ae. aus).
Holger