2017-03-21 6 views
2

現在の端末の解像度で解像度を印刷するためのコードです。ws_xpixelとws_ypixel

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

int main (int argc, char *argv[]) { 

    struct winsize ww; 
    ioctl(STDOUT_FILENO, TIOCGWINSZ, &ww); 
    printf ("x-pixels %d\n", ww.ws_xpixel); 
    printf ("y-pixels %d\n", ww.ws_ypixel); 
    return 0; 
} 

私はwinsize参照としてthisを使用。 しかし、コードはゼロだけを出力します。 ws_colまたはws_rowを使用すると正常に動作します。

助けてください、ありがとう!

答えて

1

あなたはsource code of glibcを見れば、あなたはws_colws_rowが実際を使用していないことがわかります。

/* Type of ARG for TIOCGWINSZ and TIOCSWINSZ requests. */ 
struct winsize 
{ 
    unsigned short int ws_row; /* Rows, in characters. */ 
    unsigned short int ws_col; /* Columns, in characters. */ 

    /* These are not actually used. */ 
    unsigned short int ws_xpixel; /* Horizontal pixels. */ 
    unsigned short int ws_ypixel; /* Vertical pixels. */ 
}; 

P.S:読むこのanswer、私はglibcのを指していますなぜあなたがわからない場合。

+0

ありがとうございます。 – Debashish

+1

1文字のピクセル幅を取得してください。 –

+0

[XTerm Control Sequences](http://stackoverflow.com/a/22785601/1807667)を使用すると、あなたのケースに対する解決策になるでしょう。 –

0

これらの2つの値は、の一部のターミナルエミュレータによって設定されます。

最近の調査結果をまとめたVTE feature request to set these fieldsをご覧ください。 (VTEはgnome-terminalの背後にある実際の端末エミュレーションウィジェットです)

関連する問題