你将有另一种方式要求 C 告诉你价值TIOCGWINSZ
是什么。还不如让它告诉你另一个论点的大小,当你在它的时候。
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <termios.h>
int
main(argc, argv)
int argc;
char *argv[];
{
struct winsize mywinsize;
int ttyfd;
if ((ttyfd = open("/dev/tty", O_RDWR|O_NOCTTY)) == -1) {
perror("open /dev/tty");
exit(-1);
}
if (ioctl(ttyfd, TIOCGWINSZ, &mywinsize) == -1) {
perror("ioctl TIOCGWINSZ");
exit(-1);
}
printf("TIOCGWINSZ %#08lx\n", TIOCGWINSZ );
printf("sizeof struct winsize %lu\n", sizeof(struct winsize) );
printf("rows %d\n", mywinsize.ws_row );
printf("cols %d\n", mywinsize.ws_col );
if (fclose(stdout) == EOF) {
perror("close stdout");
exit(-1);
}
exit(0);
}
也许某个善良的灵魂可能会告诉你如何Inline::C
为你包装它,但与此同时,这应该就足够了。请注意,这是一个可移植的程序,因为它可以在 ̲b̲o̲t̲h̲ 种系统上运行:
☺ BSD ☺</h2>
OpenBSD% cc getwinsz.c && a.out
TIOCGWINSZ 0x40087468
sizeof struct winsize 8
rows 81
cols 166
Darwin% cc getwinsz.c && a.out
TIOCGWINSZ 0x40087468
sizeof struct winsize 8
rows 37
cols 126
☹ SysV ☹</h2>
Slolaris% cc getwinsz.c && a.out
TIOCGWINSZ 0x005468
sizeof struct winsize 8
rows 37
cols 126
Leenooxe% cc getwinsz.c && a.out
TIOCGWINSZ 0x005413
sizeof struct winsize 8
rows 37
cols 126