2011-07-11 19 views
5

Duplicar posible:
Getting terminal width in C?¿Cómo puedo encontrar la cantidad de columnas de terminal de un programa C/C++?

En Linux y OS X, mis informes de Concha $ COLUMNAS tiene el ancho de la ventana de terminal - y cambiar el tamaño de la ventana se ajustará esta variable de shell.

Pero en mi programa C/C++, getenv ("COLUMNS") no parece encontrar la variable.

¿Alguien tiene una explicación? ¿O una sugerencia alternativa para permitir que mi programa C++ averigüe el ancho del terminal en el que se está ejecutando (para un poco de ayuda con el ajuste de palabras del mensaje)?

+3

'' $ LINES' y $ COLUMNS' son * shell * variables, no * * ambiente variables. –

Respuesta

10

Tal vez algo como esto:

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

Tomado directamente de: Getting terminal width in C?

+0

BTW esto no es "portátil" (no especificado por POSIX) pero funciona en casi todos lados en la práctica. –

+0

Funciona muy bien en mi caso, gracias! –

+1

También tendrá que manejar la señal 'SIGWINCH' si desea tratar el cambio de tamaño de la ventana. –

Cuestiones relacionadas