🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#128
Author: Robert Luberda
Date: Thu, 02 Sep 1999 07:53
18 lines
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
#129
Author: Jacek Danecki
Date: Thu, 02 Sep 1999 08:32
20 lines
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
#130
Author: Robert Luberda
Date: Fri, 03 Sep 1999 13:46
27 lines
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
#131
Author: Cezary H. Noweta
Date: Mon, 06 Sep 1999 06:56
45 lines
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