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

Posted

技术标签:

【中文标题】如何从 C/C++ 程序中找到终端列的数量? [复制]【英文标题】:How can I find the number of terminal columns from a C/C++ program? [duplicate] 【发布时间】:2011-10-03 04:15:53 【问题描述】:

可能重复:Getting terminal width in C?

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

但在我的 C/C++ 程序中,getenv("COLUMNS") 似乎找不到变量。

有人解释一下吗?或者让我的 C++ 程序计算出它正在运行的终端的宽度的替代建议(一些帮助消息自动换行)?

【问题讨论】:

$LINES$COLUMNSshell 变量,而不是 environment 变量。 【参考方案1】:

大概是这样的:

#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;

直接来自:Getting terminal width in C?

【讨论】:

顺便说一句,这不是“可移植的”(POSIX 未指定),但在实践中几乎无处不在。 在我的情况下效果很好,谢谢! 如果您想处理窗口大小的调整,您还必须处理 SIGWINCH 信号。

以上是关于如何从 C/C++ 程序中找到终端列的数量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从Oracle中的另一个子查询中选择具有最大列的行

如何从具有不同数量和索引顺序的三组字典中制作包含三列的条形图?

如何列出 c/c++ 应用程序中的所有环境变量

如何从第 2 列的 BETWEEN(dates) 和第 1 列的 DUPLICATES 中找到 MAX(date)?

使用 C/C++,如何以彩色打印到标准输出,但前提是终端支持它?

如何在 VsCode 上调试 C++/C 程序