下面這個代碼是用來擷取當前terminal window的大小的
1. 用ioctl來擷取大小
2. 當視窗大小變化時,會收到SIGWINCH的訊號
/*
* =====================================================================================
*
* Filename: window_size.c
*
* Description:
*
* Version: 1.0
* Created: 09/15/2010 01:25:56 PM
* Revision: none
* Compiler: gcc
*
* Author: YOUR NAME (),
* Company:
*
* =====================================================================================
*/
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <signal.h>
#ifndef TIOCGWINSZ
#include <sys/ioctl.h>
#endif
static void
pr_winsize(int fd)
{
struct winsize size;
if (ioctl(fd, TIOCGWINSZ, (char*)&size) < 0)
perror("TIOCGWINSZ error");
printf("%d rows, %d columns/n", size.ws_row, size.ws_col);
}
static void
sig_winch(int signo)
{
printf("SIGWINCH recived/n");
pr_winsize(STDIN_FILENO);
}
int main(void)
{
if (isatty(STDIN_FILENO) == 0)
exit(1);
if (signal(SIGWINCH, sig_winch) == SIG_ERR)
perror("signal error");
pr_winsize(STDIN_FILENO);
for (;;)
pause();
}