美文网首页
APUE读书笔记-18终端输入输出(17)

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

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

    下面代码中的程序,会打印当前窗口的大小。每次窗口大小改变的时候,程序会接收到一个SIGWINCH信号,然后打印新的大小。我们需要通过一个信号来终止这个应用程序。

    例子:打印窗口大小

    #include "apue.h"
    #include <termios.h>
    #ifndef TIOCGWINSZ
    #include <sys/ioctl.h>
    #endif
    
    static void pr_winsize(int fd)
    {
        struct winsize size;
    
        if (ioctl(fd, TIOCGWINSZ, (char *) &size) < 0)
            err_sys("TIOCGWINSZ error");
        printf("%d rows, %d columns\n", size.ws_row, size.ws_col);
    }
    
    static void sig_winch(int signo)
    {
        printf("SIGWINCH received\n");
        pr_winsize(STDIN_FILENO);
    }
    
    int main(void)
    {
        if (isatty(STDIN_FILENO) == 0)
            exit(1);
        if (signal(SIGWINCH, sig_winch) == SIG_ERR)
            err_sys("signal error");
        pr_winsize(STDIN_FILENO);   /* print initial size */
        for ( ; ; )                 /* and sleep forever */
            pause();
    }
    

    在一个终端窗口中运行这个应用程序,我们会得到如下的输出:

    $ ./a.out
    35 rows, 80 columns       initial size
    SIGWINCH received         change window size: signal is caught
    40 rows, 123 columns
    SIGWINCH received         and again
    42 rows, 33 columns
    ^? $                      type the interrupt key to terminate
    

    译者注

    原文参考

    参考: APUE2/ch18lev1sec12.html

    相关文章

      网友评论

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

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