| shlemisto |
|
|
Темы:
12
Сообщения:
118
Участник с: 13 декабря 2008
|
нужно определить какой tty активен, если сама программа, написанная для этого, зупущена в другом(этом же) tty/работает как демон |
| Natrio |
|
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
Текущая консоль: $ cat /sys/class/tty/tty0/active tty7 |
| shlemisto |
|
|
Темы:
12
Сообщения:
118
Участник с: 13 декабря 2008
|
не (>>cat 1.sh #!/bin/bash cmnd=`cat /sys/class/tty/tty0/active` touch /tmp/ttys while : do echo $cmnd >> /tmp/ttys sleep 3s done написал для systemd демона, запускающий скрипт при старте системы. Всегда выдает tty1 |
| Natrio |
|
|
Темы:
47
Сообщения:
4763
Участник с: 08 января 2011
|
shlemisto, у меня всё правильно. А вот в вашем скрипте – нет :) Строчка cmnd=`cat /sys/class/tty/tty0/active` А в цикле строчка echo $cmnd >> /tmp/ttys Вам надо было поместить чтение имени текущей консоли в цикл, то бишь сделать так: #!/bin/bash while sleep 3s do cat /sys/class/tty/tty0/active >> /tmp/ttys done |
| shlemisto |
|
|
Темы:
12
Сообщения:
118
Участник с: 13 декабря 2008
|
спасибо тебе, мил человек пхаха, ну я и ступил =) код на сях #include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int fd = -1;
int ret = -1;
char current_tty[10] = { 0 };
char prev_tty[10] = { 0 };
for (;;)
{
fd = open("/sys/class/tty/tty0/active", O_RDONLY);
if (fd < 0)
break;
fd_set fds;
int ret;
struct timeval tv;
FD_ZERO(&fds);
FD_SET(fd, &fds);
tv.tv_sec = 0;
tv.tv_usec = 500;
ret = select(fd + 1, &fds, NULL, NULL, &tv);
if (FD_ISSET(fd, &fds))
{
memset(current_tty, 0, sizeof(current_tty));
ret = read(fd, current_tty, sizeof(current_tty));
if (!strlen(current_tty) || strcmp(current_tty, prev_tty))
{
memset(prev_tty, 0, sizeof(prev_tty));
strcpy(prev_tty, current_tty);
printf("%s", current_tty);
}
}
sleep(1);
close(fd);
fflush(stdout);
}
return EXIT_SUCCESS;
} |