¿Obtener ancho de terminal en C?

He estado buscando una manera de obtener el ancho del terminal desde dentro de mi programa C. Lo que se me ocurre es algo como:

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

int main (void)
{
    struct ttysize ts;
    ioctl(0, TIOCGSIZE, &ts);

    printf ("lines %d\n", ts.ts_lines);
    printf ("columns %d\n", ts.ts_cols);
}
</code>

Pero cada vez que intento eso me sale.

<code>austin@:~$ gcc test.c -o test
test.c: In function ‘main’:
test.c:6: error: storage size of ‘ts’ isn’t known
test.c:7: error: ‘TIOCGSIZE’ undeclared (first use in this function)
test.c:7: error: (Each undeclared identifier is reported only once
test.c:7: error: for each function it appears in.)
</code>

¿Es esta la mejor manera de hacer esto, o hay una mejor manera? Si no, ¿cómo puedo hacer que esto funcione?

EDITAR: el código fijo es

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

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

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

Respuestas a la pregunta(6)

Su respuesta a la pregunta