У меня есть эта простая тестовая программа:
#include <stdio.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[], char *envp[])
{
struct winsize w;
if (!ioctl(fileno(stdout), TIOCGWINSZ, &w)) {
printf("width %d\n", w.ws_col);
} else {
printf("%s", strerror(errno));
}
return 0;
}
, которая, если она запускается с самого терминала, возвращает размер окна терминала, но по какой-то причине, если она запускается с помощью команды watch
, он просто завершается с ошибкой в ioctl (), который возвращает НЕПРАВИЛЬНЫЙ IOCTL ДЛЯ УСТРОЙСТВА.
Есть идеи почему? Какой самый надежный способ получить размер окна терминала?