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; } |