如何在C++代码中获取终端尺寸?

3

我最近尝试获取运行此程序的终端大小。
问题在于脚本+程序解决方案不方便,并且不支持用户输入或终端大小更改。

如何在C++代码中做到这一点(而不会影响脚本)?
我的代码:
Bash文件(代替C++程序运行的文件):

cols=`tput cols`
lines=`tput lines`
input="${cols}\n${lines}"
echo -ne "${input}" | [C++ program]

C++文件(实际程序):

#include <iostream>

int main() {
  unsigned lines;
  unsigned cols;
  cin >> cols;
  cin >> lines;
  // some code here
}

3
使用ncurses - Basile Starynkevitch
4
如何在 C 语言中获取终端宽度?回答:您可以使用 ioctl() 函数和 TIOCGWINSZ 常量来获取终端宽度。以下是一个示例代码:#include #include int main() { struct winsize w; ioctl(0, TIOCGWINSZ, &w); printf("Terminal width: %d\n", w.ws_col); return 0; }请注意,此方法可能不适用于非终端设备。 - 001
1
system("tput cols")... 可以解决问题,但我从未尝试过。 - j-p
2
你还需要将ncurses链接起来。 - Duck
2
通常在编译命令的末尾是 -lncursesw-lncurses - Duck
显示剩余3条评论
2个回答

8

此文所示,你可以使用ioctl调用获取终端大小。

#include <sys/ioctl.h>
#include <stdio.h>

int main (void)
{
    struct winsize w;
    ioctl(0, TIOCGWINSZ, &w);

    printf ("lines %d\n", w.ws_row);
    printf ("columns %d\n", w.ws_col);
    return 0;
}

1

如我所评论的,您想要使用ncurses

因此请安装开发包(在Debian上: aptitude install libncurses5-dev),然后:

  1. #include  <ncurses.h>
    

    添加到您的源代码中。

  2. 链接它,即使用以下命令编译:

    g++ -Wall yourcode.cc -lncurses -o yourprog
    
  3. 调用适当的函数。阅读ncurses编程指南


1
为什么不直接使用ioctl获取winsize? - 4pie0
1
一般来说,如果你关心终端,想要在其中编写代码,那么 ncurses 库就是正确的选择。 - Basile Starynkevitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接