我有一个名为 g_data 的全局变量,它包含一个指向结构的指针,其中包含两个变量来保存终端的高度和宽度。下面的函数信号处理程序检查终端是否已调整大小。在这种情况下,函数 update_data 将这两个变量的值更改为终端的当前高度和宽度。
我的问题是函数 tgetnum,无论何时被调用,它似乎都没有获得当前的终端大小(在调整大小之后)。
我正在使用 Ubuntu 18.04LTS
typedef struct s_data
{
t_lst *lst;
t_ldim ldim;
t_pos pos;
int height;
int width;
int max;
int lstsize;
} t_data;
int i = 0;
void signalhandler(int sig)
{
if (sig == SIGWINCH)
{
update_data(g_data);
if (g_data == NULL)
exit(EXIT_FAILURE);
enable_cap("ti");
print_args(g_data);
printf("%d - %d\n", i++, tgetnum("co"));
signal(SIGWINCH, signalhandler);
}
else if (sig == SIGTSTP)
{
signal(SIGTSTP, SIG_DFL);
modify_main_caps(SET);
enable_cap("te");
ioctl(0, TIOCSTI, "\032");
}
else if (sig == SIGCONT)
{
signal(SIGTSTP, signalhandler);
modify_main_caps(UNSET);
update_data(g_data);
enable_cap("ti");
print_args(g_data);
}
}