LINUX.ORG.RU

о tty, chvt...

 ,


1

1

как определить какой tty активен, если сама программа, написанная для этого, запущена в другом(этом же) tty/работает как демон?

кот

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>

static char current_tty[10] = { 0 };
static char prev_tty[10]    = { 0 };

char* get_current_tty(void)
{
    int fd  = -1;
    int ret = -1;

    fd = open("/sys/class/tty/tty0/active", O_RDONLY);

    if (fd < 0)
        exit(1);

    fd_set         fds;
    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);
            
            close(fd);
            fflush(stdout);

            return current_tty;
        }
    }
    
    close(fd);
    fflush(stdout);
}

int main(void) 
{
    for (;;)
    {
        char* tty = get_current_tty();
        if (tty)
            printf("%s", tty);
        
        sleep(1);
    }
    
    return EXIT_SUCCESS;
}
perplexus
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.