2013-09-10 2 views
2

Я новичок в системных вызовах Linux. Мой вопрос заключается в том, что у нас есть системный вызов в Linux для построения точек на экране. Я искал его, но не смог найти простого объяснения для Это. Я хочу написать простую программу C в Linux, которая напрямую отображает точку на экране без помощи C-графической библиотеки.Системный вызов для построения точки в c (linux)

Если такого системного вызова нет, как я могу создать свой собственный системный вызов для отображения точки на экране?

+0

Зачем нужен системный вызов? Как насчет написания на '/ dev/fbX' - это так? – trojanfoe

ответ

1
#define MAX_SCREEN_AREA 100 
int Gotoxy(int x, int y) 
{ 
char essq[MAX_SCREEN_AREA]={0}; // String variable to hold the escape sequence 
sprintf(essq, "\033[%d;%df", y,x); 
printf("%s", essq); 
return 0; 
} 

Попробуйте это.

+0

Умный. Требуется право xterminal? И это строки и столбцы в xterm? –

+0

@CharlieBurns Нет, для этого требуется терминал ANSI (какие xterms есть, но также консоль VT), так как это escape-последовательность ANSI. Тем не менее, что '% df' должно быть'% dH' для этого, я думаю, что будет перемещать курсор, но на самом деле ничего не печатать. – delicateLatticeworkFever

+0

@ goldilocks. Благодарю. Я действительно стар, поэтому считаю «xterm». –

2

Аппаратный независимый графический интерфейс на уровне Linux на уровне framebuffer. Этому манипулируют путем записи на узел устройства (обычно /dev/fb0), который является эквивалентом системного вызова, поскольку он является средством отправки запросов к ядру. Таким образом, это не требует каких-либо библиотек.

Общим подходом является mmap() блок памяти пространства пользователя, представляющий экран, до /dev/fb0, а затем манипулируя этим. Есть несколько вызовов ioctl(), чтобы получить информацию о дисплее фреймбуфера. Хорошим стартовым местом для информации будет документ в источнике ядра - src/Documentation/fb - это целый каталог, см., Например, «framebuffer.txt» и «api.txt». Есть несколько руководств и таких, если вы смотрите онлайн. Неважно, какой источник версии ядра вы смотрите - последней версией «api.txt» был 2011 год и «framebuffer.txt» за десять лет до этого (поэтому интерфейс очень стабильный).

Обратите внимание, что вы не можете использовать фреймбуфер из X. Если вы хотите использовать графический материал в X, вы должны использовать по крайней мере Xlib или библиотеку более высокого уровня, построенную на этом.

Смежные вопросы