下面是我用来打印当前终端像素分辨率的代码。
#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;
}我使用this作为winsize引用。但是代码只打印零。如果我使用ws_col或ws_row,它工作得很好。
请帮帮忙,谢谢!
发布于 2017-03-22 04:12:41
如果您查看source code of 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. */
};附言:如果你不确定我为什么要指向glibc,也可以阅读这个answer。
发布于 2017-05-13 06:42:50
这两个值由一些终端仿真器设置。
请参阅VTE feature request to set these fields,其中总结了我最近的发现。(VTE是gnome-terminal和许多其他终端仿真部件背后的实际终端仿真部件。)
https://stackoverflow.com/questions/42936926
复制相似问题