9
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

ターミナルの幅をC言語で取得

linuxのlsコマンドのオプションなしの場合、出力結果の1つのファイルが二つの行に分かれてしまうことがないです。これを実現するためには、端末のサイズ内にファイル名が収まるかという判定が必要になります。どうやって端末のサイズを取得するのかという疑問が浮かんだので、調べて見ました。以下は端末サイズを取得するためだけのサンプルです。

c
#include <sys/ioctl.h>
#include <unistd.h>

static size_t line_length = 80;
int main( int argc, char *argv[] )
{
    struct winsize ws;
    // get terminal size
    if( ioctl( STDOUT_FILENO, TIOCGWINSZ, &ws ) != -1 ) {
        printf("terminal_width  =%d\n", ws.ws_col);
        printf("terminal_height =%d\n", ws.ws_row);
        if( 0 < ws.ws_col && ws.ws_col == (size_t)ws.ws_col ) {
            line_length = ws.ws_col;
        } 
    }
    return 0;
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
9
Help us understand the problem. What are the problem?