类Unix系统提供一个信号-SIGWINCH,每当终端窗口的大小变化时,就会产生此信号。
示例如下:
#include
#include
#include
#include
#include
#include
#include
#include “errno.h”
static int get_screen_width(int *pColum)
{//get terminal’s width
struct winsize size;
if(isatty(STDOUT_FILENO)==0)
{
printf(“not a tty\n”);
return -1;
}
if(ioctl(STDOUT_FILENO, TIOCGWINSZ, &size)<0)
{
printf(“get win size failed: %s\n”, strerror(errno));
return -1;
}
*pColum = size.ws_col;
return 0;
}
static void sig_winch(int signo)
{
int colum_width = 0;
if (get_screen_width(&colum_width) == 0)
{
printf(“SIGWINCH received: terminal width: %d\n”, colum_width);
}
else
{
printf(“SIGWINCH received\n”);
}
if(signal(SIGWINCH, sig_winch) == SIG_ERR)
perror(“signal error”);
return ;
}
int main(void)
{
if(signal(SIGWINCH, sig_winch) == SIG_ERR)
perror(“signal error”);
while (1);
return 0;
}
运行上面示例:当手动改变终端窗口的大小时,当前终端的大小就会显示出来