一起talk C栗子吧(第一百七十五回:C语言实例--获取当前终端的行数和列数)
程序员文章站
2022-05-25 12:21:24
各位看官们,大家好,上一回中咱们说的是关闭终端中缓冲功能的例子,这一回咱们说的例子是:获取当前终端的行数和列数 。闲话休提,言归正转。让我们一起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
各位看官,关于获取当前终端行数和列数的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。