华科操作系统课设Word格式文档下载.docx
- 文档编号:16060897
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:19
- 大小:432.07KB
华科操作系统课设Word格式文档下载.docx
《华科操作系统课设Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《华科操作系统课设Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
要求用到Linux下的图形库。
2、掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。
另编写一个应用程序,调用新增加的系统调用。
实现的功能是:
文件拷贝;
3、掌握增加设备驱动程序的方法。
通过模块方法,增加一个新的设备驱动程序,其功能可以简单。
实现字符设备的驱动;
4、了解和掌握/proc文件系统的特点和使用方法
●了解/proc文件的特点和使用方法
●监控系统状态,显示系统中若干部件使用情况
●用图形界面实现系统监控状态。
5、设计并实现一个模拟的文件系统(选作)
三、实验一
1、编一个C程序,其内容为实现文件拷贝的功能
要实现文件拷贝功能,主要用到的函数是open、write、read。
以前在windows下写C语言打开文件常用的fopen,此时不能用,因为fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核api;
所以应该直接使用linux中的系统函数open。
主要用到的头文件:
Unistd.h\\包含了许多Linux系统服务的函数原型,如:
read、write
Fcntl.h\\定义了很多宏和open,fcntl函数原型
Stdio.h\\标准输入输出头文件
sys/types.h\\此头文件包含适当时应使用的多个基本派生类型
sys/stat.h\\包含了获取文件属性的一些函数
errno.h\\用于调试错误代码是所需要的一些errno变量
string.h\\包含了处理字符串的一些函数
设计思路:
由命令行参数获取2个文件名,根据其文件名和路径分别打开该2个文件,设置一个循环,从源文件复制N个字节到目的文件,直到源文件指针到文件尾,最后关闭2个文件。
在可能出错的地方需要加上相应的报错代码和中断,并输出错误信息,以方便调试或是往后应用在第2小题中可能发生的错误。
理清楚设计思路后,根据需求写出相应的源代码见后页源程序代码scopy.c;
在Linux终端使用编译命令gcc–oscopyscopy.c将程序编译并生产exe可执行文件。
然后手动创建一个测试文件test.txt,在终端输入命令
./scopytest.txttarget.txt
这样就能将源文件test.txt复制到目标文件target.txt
程序源代码scopy.c:
#include<
unistd.h>
fcntl.h>
stdio.h>
sys/types.h>
sys/stat.h>
errno.h>
string.h>
#defineBUFFER_SIZE1024//缓冲区大小
intmain(intargc,char**argv)
{
intfrom_fd,to_fd;
intbytes_read,bytes_write;
charbuffer[BUFFER_SIZE];
//设定一个缓冲区
char*ptr;
if(argc!
=3)//三个参数
{
fprintf(stderr,"
Usage:
%sfromfiletofile\n\a"
argv[0]);
return(-1);
}
/*打开源文件*/
if((from_fd=open(argv[1],O_RDONLY))==-1)
Open%sError:
%s\n"
argv[1],strerror(errno));
/*创建目的文件*/
if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
argv[2],strerror(errno));
while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
/*出错*/
if((bytes_read==-1)&
&
(errno!
=EINTR))break;
elseif(bytes_read>
0)
ptr=buffer;
while(bytes_write=write(to_fd,ptr,bytes_read))
if((bytes_write==-1)&
=EINTR))break;
/*写完了所有读的字节*/
elseif(bytes_write==bytes_read)break;
/*只写了一部分,继续写*/
elseif(bytes_write>
ptr+=bytes_write;
bytes_read-=bytes_write;
/*写的时候出错*/
if(bytes_write==-1)break;
close(from_fd);
close(to_fd);
return
(1);
}
2、编一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。
安装Linux下的GTK+:
首先要在Linux下载GTK+相关库文件并安装。
在终端输入sudoapt-getinstallgnome-core-devel,然后根据提示操作,就会安装libgtk2.0-devlibglib2.0-dev等开发所需的相关库文件。
$sudoapt-getinstallbuild-essential
$sudoapt-getinstallgnome-core-devel
$sudoapt-getinstallpkg-config
$sudoapt-getinstalllibgtk2.0*
编译GTK+代码时需要包含的头文件是gtk/gtk.h,此外,还必须连接若干库;
比如编译test.c时用以下命令。
gcc–otesttest.c`pkg-config--cflags--libsgtk+-2.0`
在编写代码时需要用到的控件、窗口等视窗物件形态,用类GtkWidget定义其为指针类型。
编写一个GTK+程序的基本步骤如下:
●初始化Gtk
●建立控件
●登记消息与消息处理函数
●执行消息循环函数gtk_main()
之后所设计的3个进程,基本上都是以这样的方式编写代码的,因为之前曾用过OpenGL,所以在这方面掌握的比较快。
初始化主要使用的函数有
gtk_init(&
argc,&
argv);
//启动GTK
gtk_window_new(GTK_WINDOW_TOPLEVEL);
//创建窗口
gtk_window_set_title(GTK_WINDOW(window),"
标题名"
);
//设置窗口标题名
gtk_widget_set_usize(window,200,200);
//设置窗口大小
gtk_widget_show(window);
//显示窗口
建立控件的一般流程
/*创建表格准备封装*/
gtk_table_new(//创建多少列
gintrows,//创建多少栏
gintcolumns,//用来决定表格如何来定大小
ginthomogeneous);
/*这个函数是将表格table,结合到窗口window里*/
gtk_container_add(GTK_CONTAINER(window),table);
gtk_widget_show(table);
//显示该表格
/*要把物件放进box中,可用以下函数*/
voidgtk_table_attach_defaults(
GtkTable*table,//参数("
table"
)是选定某表格
GtkWidget*widget,//("
child"
)是想放进去的物件
gintleft_attach,//以下参数是指定把物件放在哪里,及用多少个boxes
gintright_attach,
ginttop_attach,
gintbottom_attach);
实验截图:
实验源代码:
process.c:
gtk/gtk.h>
gintprogress_timeout(gpointerpbar)
gdoublenew_val;
chars[10];
new_val=gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(pbar))+0.01;
if(new_val>
1.0)
new_val=0.0;
sprintf(s,"
%.0f%%"
new_val*100);
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar),new_val);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(pbar),s);
returnTRUE;
}
voiddestroy_progress(GtkWidget*widget)
gtk_main_quit();
voidshow(intargc,char*argv[],char*title)
GtkWidget*window;
GtkWidget*vbox;
GtkWidget*pbar;
GtkWidget*pbar2;
GtkWidget*button;
GtkWidget*label;
inttimer;
charid_char[50];
gtk_init(&
argc,&
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_resizable(GTK_WINDOW(window),TRUE);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
g_signal_connect(G_OBJECT(window),"
destroy"
G_CALLBACK(destroy_progress),NULL);
gtk_window_set_title(GTK_WINDOW(window),title)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统