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

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。


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

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

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

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

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

        winsize结构如下:

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是列。

        整个代码如下:

	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上的程序不会以控制台为核心的。


(这里是结束)

相关推荐

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

    2024-05-13 05:52:07       10 阅读
  2. flutter 获取屏幕尺寸

    2024-05-13 05:52:07       20 阅读
  3. Android获取图片缩略图尺寸问题

    2024-05-13 05:52:07       25 阅读
  4. [蓝桥杯] 纸张尺寸(C语言

    2024-05-13 05:52:07       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-13 05:52:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-13 05:52:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-13 05:52:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-13 05:52:07       20 阅读

热门阅读

  1. vue-router(路由)

    2024-05-13 05:52:07       10 阅读
  2. 【CV】计算机视觉是什么?

    2024-05-13 05:52:07       10 阅读
  3. 排序算法大全(附源码)

    2024-05-13 05:52:07       12 阅读
  4. 基于协同过滤算法的旅游推荐系统的设计

    2024-05-13 05:52:07       10 阅读
  5. C语言输出重定向

    2024-05-13 05:52:07       8 阅读
  6. [Linux] 常用服务器命令(持续更新)

    2024-05-13 05:52:07       11 阅读
  7. GPU常用命令

    2024-05-13 05:52:07       22 阅读
  8. is和==的关系

    2024-05-13 05:52:07       9 阅读
  9. 个人工控方面收藏网址记录(持续更新中)

    2024-05-13 05:52:07       12 阅读
  10. 一文搞懂MongoDB面试题(2万字长文)

    2024-05-13 05:52:07       10 阅读