2017-03-21 14 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; 
} 

winsizethis 기준으로서 사용했다. 그러나 코드는 0 만 인쇄합니다. ws_col 또는 ws_row을 사용하면 정상적으로 작동합니다.

감사합니다. 당신이 source code of glibc 보면

답변

1

당신은 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

한 문자의 픽셀 너비를 가져 오십시오. –

+0

아마도 [XTerm Control Sequences] (http://stackoverflow.com/a/22785601/1807667)를 사용하면 귀하의 사례에 대한 해결책이 될 것입니다. –

0

이 두 값은 일부 터미널 에뮬레이터로 설정됩니다.

내 최근 결과를 요약 한 VTE feature request to set these fields을 참조하십시오. (VTE는 gnome-terminal 및 그 밖의 많은 터미널 뒤의 실제 터미널 에뮬레이션 위젯입니다.)