Unix/Linux C语言 获取控制台窗口尺寸

在Unix/Linux控制台编程,为了能输出好看一些,需要知道窗口宽度,当然使用支持很宽的窗口的终端也是个办法,但是实在没有很宽的终端怎么办呢,还是要从程序上想办法的。

判断控制台窗口宽度需要两个函数:

  • isatty 判断一个文件描述符是不是控制台终端
  • ioctl 参数TIOCGWINSZ用于获取控制台尺寸

isatty用法很简单,传入参数STDIN_FILENO,表示标准输入,返回0表示非tty。一般就判断标准输入就行了,当然如果考虑输入输出重定向,应该判断标准输出才对。

ioctl复杂一点,第一个参数是文件指针,第二个参数是TIOCGWINSZ,第三个参数是用来接收结果的winsize指针。

winsize结构如下:

cpp 复制代码
struct winsize
  {
    unsigned short int ws_row;
    unsigned short int ws_col;
    unsigned short int ws_xpixel;
    unsigned short int ws_ypixel;
  };

ws_row是行,ws_col是列。

整个代码如下:

cpp 复制代码
	if (0 == isatty(STDIN_FILENO))
	{
		cout << "not tty" << endl;
	}
	else
	{
		winsize sz;
		if (ioctl(STDIN_FILENO, TIOCGWINSZ, (char *)&sz) < 0)
		{
			cout << "get tty size error" << endl;
		}
		else
		{
			cout << "控制台窗口尺寸 ws_row=" << sz.ws_row << " ws_col=" << sz.ws_col << endl;
		}
	}
	if (sizeof(long) != 8)
	{
		cout << "非64位程序!" << endl;
		return 1;
	}

这是我惯用的程序启动流程,顺手判断了是不是64位程序,要是谁改了编译参数,不是64位我就拒绝执行了。

以上程序是在Unix/Linux下运行的,windows上不一定行,也没必要,毕竟windows上的程序不会以控制台为核心的。

(这里是结束)

相关推荐
HLC++10 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室11 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy13 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕14 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫15 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生16 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1117 小时前
linux基础IO
linux·运维·服务器
BelongPanda19 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯19 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_7779983419 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器