如何从C/C++程序中找到终端列的数量?

Lar*_*itz 5 c c++ terminal formatting

可能重复:
在C中获取终端宽度?

在Linux和OS X上,我的shell报告$ COLUMNS具有终端窗口的宽度 - 调整窗口大小将调整此shell变量.

但是在我的C/C++程序中,getenv("COLUMNS")似乎没有找到变量.

有人有解释吗?或者让我的C++程序弄清楚它正在运行的终端的宽度的另一个建议(对于一些帮助消息自动换行)?

Lai*_*ura 10

也许是这样的:

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

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

    printf("lines %d\n", w.ws_row);
    printf("columns %d\n", w.ws_col);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

直接取得:在C中获得终端宽度?

  • 顺便说一句,这不是“可移植的”(POSIX 未指定),但在实践中几乎可以在任何地方使用。 (2认同)
  • 如果要处理窗口大小的调整,也必须处理SIGWINCH信号。 (2认同)