欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

一起talk C栗子吧(第一百七十五回:C语言实例--获取当前终端的行数和列数)

程序员文章站 2022-09-28 19:28:03
各位看官们,大家好,上一回中咱们说的是关闭终端中缓冲功能的例子,这一回咱们说的例子是:获取当前终端的行数和列数 。闲话休提,言归正转。让我们一起talk C栗子吧! 看官...

各位看官们,大家好,上一回中咱们说的是关闭终端中缓冲功能的例子,这一回咱们说的例子是:获取当前终端的行数和列数 。闲话休提,言归正转。让我们一起talk C栗子吧!


看官们,我们在前面章回中介绍了termios相关的信息,以及termios提供的编程接口,通过这些接口可以操作终端,今天我们再介绍一些操作终端的编程接口,通过这些接口可以获取当前终端的行数和列数,这便是我们今天的主题。

int setupterm(char *term, int fd, int *errret);
该函数用来修改当前终端的类型 该函数的第一个参数是char*类型的指针,函数使用它指向的值来修改终端类型; 该函数的第二个参数是文件描述符,通过它可以修改终端类型; 该函数的第三个参数是一个指针,用来保存函数运行的结果; 该函数运行成功时返回1,失败时返回-1或者0.其中-1表示没有终端信息,0表示有终端信息,但是没有匹配的终端;

通常情况下,第一个参数使用空指针,这样就表示获取当前终端的类型;第三个参数也经常使用空指针,这样只需要查看函数的返回值就可以。

int tigetnum(char * capname);
该函数用来获取终端中与数值相关的值; 该函数的参数表示与终端中某个数值对应的名字; 该函数运行成功时返回终端中的与参数对应的数值,否则返回-2;

关于该函数的参数,我们可以使用终端中与行数和列数相对的名字:lines和cols。这样就可以获取到当前终端的行数和列数。我这么一说,看官们是不是想马上动手实现一下?接下来让我们一起动手吧!

    res = setupterm(NULL,fileno(stdout),NULL);

    row_count = tigetnum("lines");
    col_count = tigetnum("cols");

    printf("Terminal row:%d \n",row_count);
    printf("Terminal colum:%d \n",col_count);

我们在代码中首先获取了当前终端中的类型,然后继续获取当前终端的行数和列数,这样便实现的我们的目标。

看官们,以上是核心代码,完整的代码放到了我的资源中,大家可以下载使用。

下面是程序的运行结果,请大家参考:

Terminal row:56 
Terminal colum:113

该结果显示的是我正在使用的终端行数和列数,大家运行时可能会有不同的结果,这个是正确的,因为不同的终端拥有不同的行数和列数。正所谓世界上没有两片相同的叶子,世界上也没有两个相同的终端,哈哈。此外,在编译时需要手动链接ncurses库,因为这些接口使用了该库中的内容,具体的命令如下:

 gcc GetLineCol1.c  -o end -lncurses

各位看官,关于获取当前终端行数和列数的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。