Portál AbcLinuxu, 11. ledna 2026 20:42
$COLUMNS obvykle obsahuje počet sloupců. Stačí ji tedy přečíst pomocí getenv. Nevím ale, nakolik je to přenosné.
#include <stdio.h>
#include <term.h>
#include <ncurses.h>
int main() {
int rows, cols;
setupterm(NULL, fileno(stdout), (int*)0);
rows = tigetnum("lines");
cols = tigetnum("cols");
printf("%dx%d\n", cols, rows);
return 0;
}
Slinkovat s ncurses (-lncurses), v případě potřeby přidat include cestu (třeba -I/usr/include/ncurses).
Osobně bych asi použil to, co je popsáno v man tty_ioctl. Dále by se daly využít ncurses, nicméně to je v tomhle případě asi overkill. A pak je tu ještě ta škaredá možnost se čtením proměnných prostředí $LINES a $COLUMNS :)
#include <stdio.h>
#include <curses.h>
int
main(void)
{
setupterm(NULL, 1, NULL);
printf("%d %d\n", tigetnum("cols"), tigetnum("lines"));
return 0;
}
Je třeba linkovat s -lcurses.
Jako další level se můžeš podívat na signál SIGWINCH, případně na celou knihovnu ncurses.
void vypis(FILE *fr) /* vypis souboru - fr musi být otevřen pro čtení v text */
{
char c;
int p_radek = 1;
while (c = getc(fr), c !=EOF){
putchar(c);
if (c == '\n')
++p_radek;
if (p_radek == radek) {
printf("%*s %ls", sloupcu / 2 + 2, "MORE");
p_radek = 1;
while (getchar() == '\n')
;
putchar(c);
}
}
}
void init(void)
{
if (setupterm(NULL, 1, NULL) != ERR) {
sloupcu = COLS;
radek = LINES;
}
}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.