华科操作系统课设报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华中科技大学操作系统课程设计实验报告

专业:计算机科学与技术

班级:1101

姓名:***

学号:U*********

一、实验目的

掌握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 –o scopy scopy.c将程序编译并生产exe可执行文件。

然后手动创建一个测试文件test.txt ,在终端输入命令

./scopy test.txt target.txt

这样就能将源文件test.txt复制到目标文件target.txt

程序源代码scopy.c:

#include

#include

#include

#include

#include

#include

#include

#define BUFFER_SIZE 1024 //缓冲区大小

int main(int argc,char **argv)

{

int from_fd,to_fd;

int bytes_read,bytes_write;

char buffer[BUFFER_SIZE]; //设定一个缓冲区

char *ptr;

if(argc!=3) //三个参数

{

fprintf(stderr,"Usage:%s fromfile tofile\n\a",argv[0]);

return(-1);

}

/* 打开源文件*/

if((from_fd=open(argv[1],O_RDONL Y))==-1)

{

fprintf(stderr,"Open %s Error:%s\n",argv[1],strerror(errno));

return(-1);

}

/* 创建目的文件*/

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

fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));

return(-1);

}

while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))

{

/* 出错*/

if((bytes_read==-1)&&(errno!=EINTR)) break;

else if(bytes_read>0)

{

ptr=buffer;

while(bytes_write=write(to_fd,ptr,bytes_read))

{

/* 出错*/

if((bytes_write==-1)&&(errno!=EINTR))break;

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

else if(bytes_write==bytes_read) break;

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

else if(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+相关库文件并安装。

在终端输入sudo apt-get install gnome-core-devel ,然后根据提示操作,就会安装libgtk2.0-dev libglib2.0-dev 等开发所需的相关库文件。

$sudo apt-get install build-essential

$sudo apt-get install gnome-core-devel

$sudo apt-get install pkg-config

$sudo apt-get install libgtk2.0*

相关文档
最新文档