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 ссылка. Но код печатает только нули. Если я использую ws_col или же ws_row это работает отлично.

Пожалуйста, помогите, спасибо!

2 ответа

Если вы посмотрите на исходный код glibc, вы увидите, что ws_col а также ws_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.  */
};

PS: Прочтите также этот ответ, если вы не уверены, почему я указываю на glibc.

Эти два значения устанавливаются некоторыми эмуляторами терминала.

Пожалуйста, посмотрите запрос функции VTE, чтобы установить эти поля, в которых обобщены мои последние результаты. (VTE - фактический виджет эмуляции терминала позади gnome-terminal и много других.)

Другие вопросы по тегам