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组合快捷键来清空终端屏幕.但是,这样做其实并不是真正的清空屏幕,它只是给人一种错觉,让人以为屏幕清空了 ...
随机推荐
- sendmail 的安装、配置与发送邮件的具体实现
Ubuntu 中sendmail 的安装.配置与发送邮件的具体实现 centos安装sendmail与使用详解 CentOS下搭建Sendmail邮件服务器 使用外部SMTP发送邮件 使用mailx ...
- Python自学之路---Day01
目录 Python自学之路---Day01 注释 单行注释 多行注释 print()函数 语法 参数 实例 input()函数 语法 参数 实例 查看Python的关键字 代码 变量与常量 变量 如何 ...
- 《C Primer Plus》- 第二章 C语言概述
本笔记写于2020年1月27日. 本系列文章参考的是<C Primer Plus>(第六版),其中里面会有笔者自己的相关补充. 以下示例均运行于macOS Catalina 10.15.2 ...
- 程序中出现list assignment index out of range的解决方法
class stack: def __init__(self): self.num = 0 self.elem=[] def isEmoty(self): if self.num == 0: prin ...
- RaspBerry--解决无法用 ssh 直接以 root 用户登录
参考:https://www.cnblogs.com/xwdreamer/p/6604593.html 以普通用户登录,然后切换至 root 用户. 编辑 /etc/ssh/sshd_config 添 ...
- Pyspider的简单介绍和初使用
Pyspider Pyspider是由国人(binux)编写的强大的网络爬虫系统 Ptspider带有强大的WebUi / 脚本编辑器 / 任务监控器 / 项目管理器以及结果处理器.他支持多种数据 ...
- hdu1066 Last non-zero Digit in N!(求阶乘最后一位不为0的数字)
http://acm.hdu.edu.cn/showproblem.php?pid=1066 转自:https://blog.csdn.net/fengyu0556/article/details/5 ...
- 使用GitHub Pages服务进行域名URL转发
有时,你注册了一个域名,但是你没有搭建服务器.你希望这个域名能指向你的主页/博客/微博等.但是,很多域名注册商不提供这种服务,或者这是一项收费服务.这时你可以使用GitHub来实现这一功能. 你需要导 ...
- Spring-Boot 访问外部接口的几种方案总结
一.简介 在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求,针对这一需求目前存在着三种解决方案,下面将对这三种方案进行整理和说明. 二.Spring- ...
- linux 笔记本
命令 作用 tail -f 日志文件名 将日志同步输出 echo "">文件名 清空文件内容