华科操作系统课设报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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*