在 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) 中绘制一个点的系统调用的主要内容,如果未能解决你的问题,请参考以下文章

linux 内核通过啥系统调用,来与硬件交互?

谁在 Linux 系统中调用了我的 DBus API

系统调用挂钩示例参数不正确

Linux系统 他的源码是怎么调 怎么用?

如何调用系统关机函数

Linux电源管理_wakelocks