2011-07-11 10 views
5

Powiel możliwe:
Getting terminal width in C?Jak mogę znaleźć liczbę kolumn terminalu z programu C/C++?

Linux i OS X, moje raporty powłoki $ KOLUMNY ma szerokość okna terminala - i zmiany rozmiaru okna dostosuje tę zmienną powłoki.

Ale w moim programie C/C++ getenv ("COLUMNS") nie znajduje tej zmiennej.

Ktoś ma wyjaśnienie? Lub alternatywna sugestia, aby mój program C++ mógł odczytać szerokość terminalu, na którym działa (w przypadku niektórych zawijanych słów programu pomocy)?

+3

'$ LINES' i' $ COLUMNS' są * shell * Zmienne środowiskowe, a nie * * zmienne. –

Odpowiedz

10

Może coś takiego:

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

Zrobione prosto od: Getting terminal width in C?

+0

BTW to nie jest "przenośne" (nie określone przez POSIX), ale działa prawie wszędzie w praktyce. –

+0

Działa świetnie w moim przypadku, dzięki! –

+1

Będziesz także musiał obsłużyć sygnał 'SIGWINCH', jeśli chcesz zmierzyć rozmiar okna. –

Powiązane problemy