2011-07-11 1 views
5

Possible en double:
Getting terminal width in C?Comment puis-je trouver le nombre de colonnes de terminal à partir d'un programme C/C++?

Sous Linux et OS X, mes rapports shell $ columns a la largeur de la fenêtre de terminal - et le redimensionnement de la fenêtre régler cette variable shell.

Mais dans mon programme C/C++, getenv ("COLUMNS") ne semble pas trouver la variable.

Quelqu'un at-il une explication? Ou une suggestion alternative pour laisser mon programme C++ déterminer la largeur du terminal dans lequel il s'exécute (pour un certain mot d'aide de message d'aide)?

+3

'$ LINES' et' $ COLUMNS' sont * shell * variables, pas * environnement * les variables. –

Répondre

10

Peut-être quelque chose comme ceci:

#include <sys/ioctl.h> 
#include <stdio.h> 

int main() 
{ 
    struct winsize w; 
    ioctl(0, TIOCGWINSZ, &w); 

    printf("lines %d\n", w.ws_row); 
    printf("columns %d\n", w.ws_col); 
    return 0; 
} 

pris directement à partir de: Getting terminal width in C?

+0

BTW ce n'est pas "portable" (non spécifié par POSIX) mais fonctionne presque partout dans la pratique. –

+0

Fonctionne très bien dans mon cas, merci! –

+1

Vous devrez également gérer le signal 'SIGWINCH' si vous voulez gérer le redimensionnement de la fenêtre. –

Questions connexes