Thread View: pl.comp.os.linux.programowanie
4 messages
4 total messages
Started by Robert Luberda
Thu, 02 Sep 1999 07:53
Terminal sterujący
Author: Robert Luberda
Date: Thu, 02 Sep 1999 07:53
Date: Thu, 02 Sep 1999 07:53
18 lines
1171 bytes
1171 bytes
Hej! Czy ktoś z was może wie, jak z poziomu programu dowiedzieć się, na jakim terminalu sterującym proces został uruchomiony? Jest wprawdzie funkcja biblioteczna ctermid(3), ale ona zawsze zwraca /dev/tty, a mi chodzi o coś bardziej konkretnego (np. /dev/tty1). Wiem, że zawsze można sprawdzić funkcją ttyname, do którego terminala odnosi się stdin (-out, -err), ale przecież to nie musi być teminal sterujący (vide: a.out < /dev/tty1 >& /dev/tty1). Pozdrowienia, Robert -- robert@pingu.ii.uj.edu.pl
Re: Terminal sterujący
Author: Jacek Danecki
Date: Thu, 02 Sep 1999 08:32
Date: Thu, 02 Sep 1999 08:32
20 lines
1329 bytes
1329 bytes
On 2 Sep 1999, Robert Luberda wrote: > > Hej! > > Czy ktoś z was może wie, jak z poziomu programu dowiedzieć się, na jakim > terminalu sterującym proces został uruchomiony? Jest wprawdzie funkcja > biblioteczna ctermid(3), ale ona zawsze zwraca /dev/tty, a mi chodzi o > coś bardziej konkretnego (np. /dev/tty1). A zobacz w źródłach do programu tty z pakietu sh-utils. -- Jacek Danecki mail: biv@micronet.com.pl www: http://www.micronet.com.pl/~biv Registered Linux user number 137044 -- Lista dyskusyjna pl-comp-os-linux-programowanie - http://www.newsgate.gliwice.pl
Re: Terminal sterujący
Author: Robert Luberda
Date: Fri, 03 Sep 1999 13:46
Date: Fri, 03 Sep 1999 13:46
27 lines
1466 bytes
1466 bytes
Jacek Danecki <biv@micronet.com.pl> wrote: >> Czy ktoś z was może wie, jak z poziomu programu dowiedzieć się, na jakim >> terminalu sterującym proces został uruchomiony? Jest wprawdzie funkcja >> biblioteczna ctermid(3), ale ona zawsze zwraca /dev/tty, a mi chodzi o >> coś bardziej konkretnego (np. /dev/tty1). > A zobacz w źródłach do programu tty z pakietu sh-utils. To nic nie da, gdyż bez patrzenia do zródel można sie przekonac, ze polecenie tty korzysta z funkcji ttyname, wiec latwo mozna je oszukac: 55:> tty /dev/ttyp4 56:> tty < /dev/ttyp5 /dev/ttyp5 Ale podsunales mi fajny pomysl: popatrze do zrodel ps-a, szkoda, ze sam wczesniej na to nie wpadlem. Pozdrowienia, Robert -- robert@pingu.ii.uj.edu.pl
Re: Terminal sterujšcy
Author: Cezary H. Noweta
Date: Mon, 06 Sep 1999 06:56
Date: Mon, 06 Sep 1999 06:56
45 lines
2265 bytes
2265 bytes
Witam,
> Czy kto z was może wie, jak z poziomu programu dowiedzieć się, na jakim
> terminalu sterujšcym proces został uruchomiony? Jest wprawdzie funkcja
> biblioteczna ctermid(3), ale ona zawsze zwraca /dev/tty, a mi chodzi o
> co bardziej konkretnego (np. /dev/tty1).
Informacja ta znajduje sie w /proc/<pid>/stat (czyli /proc/self/stat)
na pozycji siodmej. Jest to int w formacie major_dev_num * 0x0100 +
+ minor_dev_num. Polecam PROC na piatej stronie MANa. Z tej informacji
korzysta PS. Opis numerow urzedzen znajduje sie w zrodlach jadra w
Documentation/devices.txt. Zero oznacza brak terminala. Przykladowy kod:
void GetCtrlTerminal(int *major, int *minor)
{
int tty;
FILE *f = fopen("/proc/self/stat", "r");
fscanf(f, "%*d %*s %*c %*d %*d %*d %d", &tty);
fclose(f);
*major = tty / 0x0100;
*minor = tty % 0x00FF;
}
Co do funkcji ctermid() to jest ona bezuzyteczna. Oto jej kod:
char *
DEFUN(ctermid, (s), char *s)
{
static char name[L_ctermid];
if (name[0] == '\0')
(void) strcpy(name, "/dev/tty");
if (s == NULL)
return(name);
return(strcpy(s, name));
}
-- pozdrawiam
--
Cezary H. Noweta 90-237 LODZ, ul. J.Matejki 34/38 POLAND
(chncc@irys.usun.drugiitrzeciczlon.uni.lodz.pl) +48 42 6356013, 6356012
University of Lodz - Main Library fax 6781678
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads