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 返回
ioctl函数的使用之查看终端屏幕大小的更多相关文章
- JS获取终端屏幕、浏览窗口的相关信息
查看终端屏幕相关信息,在windows系统的控制面板可以查到分辨率且可以设置,更具体的浏览器可视窗口等信息则需要借助其他工具.而在程序里需要动态获取时该怎么做呢? 琢磨的一个js方法,供大家参考.如下 ...
- 第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 ...
- (十)Linux 网络编程之ioctl函数
1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...
- 文件I/O之ioctl函数
ioctl函数是I/O操作的杂物箱.不能用其他函数表示的I/O操作通常都能用ioctl表示.终端I/O是ioctl的最大使用方面. ioctl函数通过对文件描述符发送特定的命令来控制文件描述符所代表的 ...
- Linux系统编程(4)——文件与IO之ioctl函数
ioctl是设备驱动程序中对设备的I/O通道进行管理的函数.所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率.马达的转速等等.它的参数个数如下:int ioctl(int ...
- UNIX网络编程——ioctl 函数的用法详解
1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...
- 六、文件IO——fcntl 函数 和 ioctl 函数
6.1 fcntl 函数 6.1.1 函数介绍 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd ...
- ioctl函数详细说明(网络)
ioctl 函数 本函数影响由fd 参数引用的一个打开的文件. #include<unistd.h> int ioctl( int fd, int request, .../* void ...
- Linux系统里如何彻底的清空终端屏幕?
Linux用户,特别是Ubuntu或CentOS用户,基本上都习惯使用clear命令或Ctrl+L组合快捷键来清空终端屏幕.但是,这样做其实并不是真正的清空屏幕,它只是给人一种错觉,让人以为屏幕清空了 ...
随机推荐
- (2)关于opencv解压
关于opencv解压,一定不能解压到你的C盘的 ProgramFile(x86)中,不然,你肯定不会成功,你要放在C盘的其他文件夹,或者是别的盘中 就是因为这一个错误,我弄了一天,哎哎,时间宝贵啊
- CF round #622 (div2)
CF Round 622 div2 A.简单模拟 B.数学 题意: 某人A参加一个比赛,共n人参加,有两轮,给定这两轮的名次x,y,总排名记为两轮排名和x+y,此值越小名次越前,并且对于与A同分者而言 ...
- shell 实现war包的配置更新和自动发布
此脚本主要用来实现非maven tomcat项目的war包手动发布, 1.将测试war包上传至指定目录 2.备份目前生产代码 3.自动配置文件替换 4.新版本代码的发布 #!/bin/bash ### ...
- 报错:不是GROUP BY 表达式
oracle库中:group by后面必须加上你select后面所查询的所有除聚合函数之外的所有字段. 解决方法:将group by放入子查询中使用或者将select后面的所有查询字段放入group ...
- vue安装openlayers,jquery,bootstrap,阿里iconfont,
安装 安装openlayers安装指定包安装openlayersVUE中的地图import ol from "openlayers";import "openlayers ...
- Android 公告新闻消息资讯之垂直滚动效果
垂直滚动新闻栏的实现原理: 就是一个自定义的LinearLayout,并且textView能够循环垂直滚动,而且条目可以点击,显示区域最多显示2个条目,并且还有交替的属性垂直移动的动画效果,通过线程来 ...
- 基于libcurl的POST(http)
#include <stdio.h> #include <curl/curl.h> int main (void) { char *url="http://www.n ...
- sudo输入密码
网易云音乐, 启动问题. 修改 .desktop 文件 Exec=sh /home/xyq/.music.sh # ~/.music.sh echo 密码 | sudo -S netease-clou ...
- feign声明式客户端
参考地址: https://blog.csdn.net/qq_30643885/article/details/85341275 Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得 ...
- mysql安装(centos7)
1.下载rpm wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 2.安装rpm yum ...