我目前正在为大学做作业,我不得不为Xv6创建的几个系统调用出现了一些问题。
这些系统调用的目的是从用户程序中提取0x13模式。
我的问题是:
如果尝试只在syspro.c文件上创建两个int全局变量,但我不确定它们是否被存储。
发布于 2021-12-20 08:23:29
有一个系统调用,它接收一些坐标以保存另一个系统调用使用。如何和在哪里实际存储这些坐标(两个int值)。
您可以创建一个新的静态变量,您可以在内核中找到这类变量的一些示例,例如struct superblock sb;
中的fs.c
或proc.c
中的int nextpid = 1;
。
所以在你的情况下,你可以有这样的东西:
int draw_xy[2];
在系统调用上实际上画了一条线,我需要将像素的值设置为颜色,调用系统调用来设置第一个系统调用中的像素没有任何作用,可以从另一个系统调用进行系统调用吗?
我认为你不应该,但你可以有一个解决办法。
让我们想象一下,您的代码中有一个名为draw_pixel(x, y, color);
的系统调用,您将得到如下内容:
sys_draw_pixel(void) {
int x, y, color;
// read params
if(argint(0, &x) < 0 || argint(1, &y) < 0 || argint(2, &color) < 0)
return -1;
// call implementation
return _draw_pixel_color(x, y, color);
}
如果draw_pixel_color
是通过_draw_pixel_color
实现的,您可以为其他系统调用它。
在这种情况下,您可以拥有如下内容:
sys_draw_line(void) {
int x0, x1, y0, y1, color;
// read params
if(argint(0, &x0) < 0 || argint(1, &x1) < 0 ..... )
return -1;
int i, j;
for(i = x0; i < y1; ++i)
for(j = y0; j < y1; ++j)
_draw_pixel_color(x, y, color);
return 0;
}
https://stackoverflow.com/questions/70277637
复制相似问题