처럼 당신은 TIOCGWINSZ와 현재 터미널의 높이를 읽을 수 있습니다
는
#include <sys/ioctl.h> /* needed for lines */
#include <signal.h> /* needed for lines */
#include <stdio.h> /* needed for printf */
#include <time.h> /* needed for sleep */
unsigned short lines;
static void get_lines(int signo) {
struct winsize ws;
ioctl(fileno(stdout), TIOCGWINSZ, &ws);
lines = ws.ws_row;
}
int main(int argc, char** argv) {
int i;
struct timespec ts;
get_lines(SIGWINCH);
signal(SIGWINCH, get_lines);
i = lines;
while (1) {
if (i >= lines) {
printf("header\n");
i = 3; /* 3 not 1 because header + last empty line */
} else {
i++;
}
printf("line\n");
ts.tv_sec = 0;
ts.tv_nsec = 500000000;
nanosleep(&ts, NULL);
}
}
라인의 수는 ws.ws_row
에 지금이다.
사용자가 터미널 크기를 변경하면 (즉, 터미널 창의 크기를 조정할 때) SIGWINCH
이 포 그라운드 프로세스로 전송됩니다. 따라서이 이벤트에 대해 신호 처리기을 설정하고 창 크기를 다시 읽어야합니다.
출처
2017-04-05 13:20:09
Ctx
감사합니다. 이것은 정확히 내가 필요한 것과 같습니다. –