zoukankan      html  css  js  c++  java
  • ioctl函数的使用之查看终端屏幕大小

    要想查看一个终端屏幕的大小,可以使用ioctl()函数,步骤如下。

    1.首先找到对应终端的文件号,一般在   /dev/pts/....(0,1,2..)。具体几号需要自己验证。如在pts目录下使用命令

    (echo   "abcde"   >  2)将abcde打印到2号终端上。

    2,找到终端文件后,以2号为例,打开该文件,代码如下:

      int fd;

      #define           DEV        /dev/pts/2

      fd=open(DEV,O_RDONLY|O_NOCTTY)//以只读且不控制该终端的模式打开该文件,返回文件描述符

    3.通过ioctl()函数操作来查看2号终端屏幕大小

      ioctl可以使用的命令列表可以通过      man ioctl_list   来查看,中间为命令,右面是返回值类型

      如查看屏幕大小的函数是TIOCGWINSZ,如果想要使用该函数和声明变量,必须要加入该函数的上面的头文件(备注:由于Linux下的man手册没有及时更新,所以需要自己在include下手动查找一下,验证此头文件是否改变。如TIOCGWINSZ函数的头文件改为

    <asm/termios.h>)    

    部分代码如下:

      struct      winsize    size;

      ioctl(fd,TIOCGWINSZ,&size);

      解释:由于TIOCGWINSZ的返回值类型是struct      winsize *  ,所以由此可以看出需要声明上面类型的变量来接,而返回值没有加const,所以应该被改变其中的值,所以声明的是变量,实参取地址。

    4.打印返回值。

      问:虽然知道了返回值是个结构体。但是我们怎么知道结构体内有什么成员变量呢?

      解:通过tag查找,如果已经在vim中设置了tags( tags是将include目下所有文件生成索引数据文件,如果没有设置见附录安装),可以将光标放到要查找的类型上面(只能查找enum,struct,#define,typedef),如struct  winsize size的红色单词,然后按“ctrl”+"]",来进行查找,按“ctrl”+"T"返回。

      找到成员变量后打印大家应该都会了把,在这里就不列举了。

    附录:ctags 的设置

    ctags:建立查找索引 可以查找enum struct #define typedef
    1.建立查找对象索引数据文件
    [root@king IO]# cd /usr/include/
    [root@king include]# ctags -R ./ 将include目下所有文件生成索引数据文件tags
    2.修改vim配置文件 支持tags查找
    [root@king include]# vim /etc/vimrc
    增加 set tags=/usr/include/tags

    3.使用方法
    在vim中光标处于要查找的对象上,ctrl+]进行查找 ctrl+t 返回

  • 相关阅读:
    Linux LAMP架构搭建
    Linux 系统版本查询
    Linux 安装本地 yum源
    Linux 虚拟机安装vmware tools
    随记分页码
    flexigrid 修改json格式
    Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案
    web api 文档声明
    android UI
    Sending HTML Form Data
  • 原文地址:https://www.cnblogs.com/edan/p/8830750.html
Copyright © 2011-2022 走看看