在 c(linux) 中绘制一个点的系统调用
Posted
技术标签:
【中文标题】在 c(linux) 中绘制一个点的系统调用【英文标题】:System call to plot a point in c( linux) 【发布时间】:2013-09-10 15:25:02 【问题描述】:我是 Linux 系统调用的新手。我的问题是我们在 Linux 中是否有一个系统调用来在屏幕上绘制点。我用谷歌搜索了它,但找不到任何简单的解释。我想在 Linux 中编写一个简单的 C 程序,无需借助 C 图形库即可直接在屏幕上绘制一个点。
如果没有这样的系统调用,我如何创建自己的系统调用来在屏幕上绘制点?
【问题讨论】:
为什么一定要系统调用?写信给/dev/fbX
怎么样?这算不算?
【参考方案1】:
Linux 上最低级别的硬件独立图形接口是framebuffer。这是通过写入设备节点(通常为/dev/fb0
)来操作的,这相当于系统调用,因为它是向内核发送请求的一种方式。所以这不需要任何库。
一种常见的方法似乎是将mmap()
一块用户空间内存表示为/dev/fb0
,然后对其进行操作。有一些ioctl()
调用来获取有关帧缓冲区显示的信息。一个很好的信息起点是内核源代码中的文档——src/Documentation/fb
是一个完整的目录,参见例如“framebuffer.txt”和“api.txt”在那里。如果您在网上查看,则有一些教程等。你看哪个内核版本源并不重要——“api.txt”的最后一个版本是 2011 年,而“framebuffer.txt”是十年前的(所以接口非常稳定)。
请注意,您不能在 X 中使用帧缓冲区。如果您想在 X 中进行图形处理,您必须至少使用 Xlib,或基于此构建的更高级别的库。
【讨论】:
【参考方案2】:#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;
试试这个。
【讨论】:
聪明。需要一个 xterminal 对吗?这些是 xterm 中的行和列? @CharlieBurns 不,它需要一个 ANSI 终端(xterm 是,VT 控制台也是),因为这是一个 ANSI 转义序列。但是,我认为%df
应该是 %dH
才能工作,这将移动光标但实际上不会打印任何内容。
@goldilocks。谢谢。我真的老了,所以我认为“xterm”。
我不认为这是 OP 的想法,但它可能对他有用。他/她可能正在考虑屏幕上的像素。
@CharlieBurns : 'xterm' 是完全有效的当代命名法 IMO,大声笑,对于文字 xterm
或更通俗地说是任何基于 X 服务器的 GUI 终端。我的意思是它不 需要xterm(或X windows),它需要一个ANSI 兼容的终端,但它可以在xterm 上工作,因为xterms 是ANSI 兼容的。有点像鳟鱼是鱼:如果你有一个需要鱼的食谱,你可以用鳟鱼,但它不需要。它只需要某种鱼。以上是关于在 c(linux) 中绘制一个点的系统调用的主要内容,如果未能解决你的问题,请参考以下文章