美文网首页LinuxLinux学习之路
APUE读书笔记-18终端输入输出(16)

APUE读书笔记-18终端输入输出(16)

作者: QuietHeart | 来源:发表于2020-09-09 21:56 被阅读0次

12、终端窗口大小

大多数UNIX系统提供一种方式,可以跟踪当前终端窗口大小,以便内核在大小改变的时候通知前台进程组。内核对每一个终端和伪终端维护一个窗口大小的结构。

struct winsize
{
        unsigned short ws_row;       /* rows, in characters */
        unsigned short ws_col;       /* columns, in characters */
        unsigned short ws_xpixel;    /* horizontal size, pixels (unused) */
        unsigned short ws_ypixel;    /* vertical size, pixels (unused) */
};

结构的规则如下:

  1. 我们可以通过使用TIOCGWINSZ的ioctl来获取当前结构的值。
  2. 我们可以通过TIOCSWINSZ的ioctl向内核存储一个新的这个结构的值。如果新的值和当前内核存放的值不同,那么会给前台进程组发送一个SIGWINCH信号。(需要注意的是前面说过,这个信号的默认情况是被忽略)
  3. 除了存放当前的结构值以及当值变化的时候发送信号之外,内核不会对这个结构做任何事情。对于这个结构的解释,完全交给应用程序来做。

提供这个特性的原因是为了在窗口大小改变的时候通知应用程序(例如vi编辑器)。当收到这个信号的时候,应用程序可以获取新的大小,然后重新绘制屏幕。

相关文章

网友评论

    本文标题:APUE读书笔记-18终端输入输出(16)

    本文链接:https://www.haomeiwen.com/subject/zgmnjktx.html