在 macOS M1 Arm64 中通过系统调用获取屏幕分辨率

问题描述 投票:0回答:1

我正在学习arm64汇编,想做一个主机游戏。我获得了有关如何延迟使用 nanosleep 并将一些字符打印到控制台的信息。

现在我想获取屏幕的宽度和高度。这是我拥有的关于 macOS 系统调用的唯一资源,但我似乎没有找到任何有关屏幕分辨率的资源。

请帮忙。

macos assembly system-calls apple-m1 apple-silicon
1个回答
0
投票

要查找终端窗口的大小,请通过对终端文件描述符(例如文件描述符

ioctl
)调用
TIOCGWINSZ
来调用
0
。该示例是用 C 语言编写的,但您应该能够轻松地将其转换为汇编语言。我更愿意向您展示一个汇编示例,但我现在手边没有 macOS 来确保它是正确的。

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

struct winsize sz;

/* get the size of the terminal */
ioctl(STDIN_FILENO, TIOCGWINSZ, &sz);

printf("the terminal has %d rows and %d columns\n", sz.ws_row, sz.ws_col);

窗口大小结构的布局是四个半字,按此顺序:

ws_row     number of rows
ws_col     number of columns
ws_xpixel  number of horizontal pixels
ws_ypixel  number of vertical pixels

请注意,

ws_xpixel
ws_ypixel
字段可能不可靠。

当调整终端窗口大小时,将向终端前台进程组中的所有进程传递

SIGWINCH
(窗口更改)信号。您可以处理
SIGWINCH
来更新游戏对终端窗口当前大小的了解。在
SIGWINCH
处理程序中,再次调用
TIOCGWINSZ
调用以获取更新的终端大小。

© www.soinside.com 2019 - 2024. All rights reserved.