华科操作系统课设.docx

上传人:b****5 文档编号:3149958 上传时间:2022-11-18 格式:DOCX 页数:19 大小:432.07KB
下载 相关 举报
华科操作系统课设.docx_第1页
第1页 / 共19页
华科操作系统课设.docx_第2页
第2页 / 共19页
华科操作系统课设.docx_第3页
第3页 / 共19页
华科操作系统课设.docx_第4页
第4页 / 共19页
华科操作系统课设.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

华科操作系统课设.docx

《华科操作系统课设.docx》由会员分享,可在线阅读,更多相关《华科操作系统课设.docx(19页珍藏版)》请在冰豆网上搜索。

华科操作系统课设.docx

华科操作系统课设

 

操作系统课程设计实验报告

 

专业:

信息安全

班级:

0903

姓名:

付晓帆

学号:

U200915328

 

一、实验目的

掌握Linux操作系统的使用方法;

了解Linux系统内核代码结构;

掌握实例操作系统的实现方法。

二、实验要求

1、掌握Linux操作系统的使用方法,包括键盘命令、系统调用;掌握在Linux下的编程环境。

●编一个C程序,其内容为实现文件拷贝的功能;

●编一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。

要求用到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

#include

#include

#include

#include

#include

#include

#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)

{

fprintf(stderr,"Open%sError:

%s\n",argv[1],strerror(errno));

return(-1);

}

/*创建目的文件*/

if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)

{

fprintf(stderr,"Open%sError:

%s\n",argv[2],strerror(errno));

return(-1);

}

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)&&(errno!

=EINTR))break;

/*写完了所有读的字节*/

elseif(bytes_write==bytes_read)break;

/*只写了一部分,继续写*/

elseif(bytes_write>0)

{

ptr+=bytes_write;

bytes_read-=bytes_write;

}

}

/*写的时候出错*/

if(bytes_write==-1)break;

}

}

close(from_fd);

close(to_fd);

return

(1);

}

2、编一个C程序,其内容为分窗口同时显示三个并发进程的运行结果。

要求用到Linux下的图形库。

安装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:

#include

#include

#include

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,&argv);

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)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1