要想查看一个终端屏幕的大小,可以使用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 返回

ioctl函数的使用之查看终端屏幕大小的更多相关文章

  1. JS获取终端屏幕、浏览窗口的相关信息

    查看终端屏幕相关信息,在windows系统的控制面板可以查到分辨率且可以设置,更具体的浏览器可视窗口等信息则需要借助其他工具.而在程序里需要动态获取时该怎么做呢? 琢磨的一个js方法,供大家参考.如下 ...

  2. 第3章 文件I/O(4)_dup、dup2、fcntl和ioctl函数

    5. 其它I/O系统调用 (1)dup和dup2函数 头文件 #include<unistd.h> 函数 int dup(int oldfd); int dup2(int oldfd, i ...

  3. (十)Linux 网络编程之ioctl函数

    1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...

  4. 文件I/O之ioctl函数

    ioctl函数是I/O操作的杂物箱.不能用其他函数表示的I/O操作通常都能用ioctl表示.终端I/O是ioctl的最大使用方面. ioctl函数通过对文件描述符发送特定的命令来控制文件描述符所代表的 ...

  5. Linux系统编程(4)——文件与IO之ioctl函数

    ioctl是设备驱动程序中对设备的I/O通道进行管理的函数.所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率.马达的转速等等.它的参数个数如下:int ioctl(int ...

  6. UNIX网络编程——ioctl 函数的用法详解

    1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...

  7. 六、文件IO——fcntl 函数 和 ioctl 函数

    6.1 fcntl 函数 6.1.1 函数介绍 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd ...

  8. ioctl函数详细说明(网络)

    ioctl 函数 本函数影响由fd 参数引用的一个打开的文件. #include<unistd.h> int ioctl( int fd, int request, .../* void ...

  9. Linux系统里如何彻底的清空终端屏幕?

    Linux用户,特别是Ubuntu或CentOS用户,基本上都习惯使用clear命令或Ctrl+L组合快捷键来清空终端屏幕.但是,这样做其实并不是真正的清空屏幕,它只是给人一种错觉,让人以为屏幕清空了 ...

随机推荐

  1. ES6 之 字符串扩展

    字符串所有的方法,不会修改字符串本身(字符串是不可变的),操作完成会 返回一个新的字符串. 将一个值转化为字符串,.toString()方法,但是null和undefined值没有这个方法, 1.字符 ...

  2. 同行评审|keywords

    审稿流程: 初审 直接被拒,editor开组会讨论的结果 论文水平低 不符合刊物宗旨和要求 同行评审: 单盲评审 双盲评审:限制审稿人倾向 公开评审PNAS Analyse search result ...

  3. Thread--synchronized&volatile

  4. vue多选验证

    vue select 多选 验证 <FormItem :prop="'formList.'+index+'.name'" label="姓名" :rule ...

  5. 2019杭电暑假多校训练 第六场 Snowy Smile HDU - 6638

    很多题解都是简单带过,所以打算自己写一篇,顺便也加深自己理解 前置知识:线段树.线段树维护最大字段和.二维坐标离散化 题解: 1.很容易想到我们需要枚举所有子矩阵来得到一个最大子矩阵,所以我们的任务是 ...

  6. MacOS最佳思维导图推荐-MindNode 7

    思维导图软件哪个比较好呢?MindNode for mac下载一款功能简单,界面简洁,不用看教程都会用的思维导图软件.mindnode 7 mac版可随时随地记录自己的想法,让您从灵感入手,将奇思妙想 ...

  7. 干货 | 调用AI api 实现网页文字朗读

    京东云上提供了足够多的人工智能api,并且都使用了http的方式进行了封装,用户可以方便在自己的系统中接入京东云的ai能力.今天就是介绍一下如何编写很少的代码就能使用京东云的语音合成api在网页中实现 ...

  8. Python重学记录1

    写下这个标题觉得可笑,其实本人2014年就自学过一次python,当时看的是中谷教育的milo老师的视频,也跟着写了一些代码,只是因为当时工作上用不到也就淡忘了.不过说实话当时的水平也很低下,本来也没 ...

  9. git 推送到github最常用命令

    初始化仓库,上传到github中. git init git add README.md git commit -m "first commit" git remote add o ...

  10. github新手使用教程

    1.首先打开https://github.com/官网 注册一个github账号 2.注册成功之后,登录账号,创建一个属于自己的库 3.创建完成之后,为了方便电脑上的代码上传到github 仓库上,要 ...