一起talk C栗子吧(第一百七十五回: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

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

你可能感兴趣的:(终端行数,终端列数,setupterm,tigetnum)