华中科技大学操作系统实验linux线程及信号灯,华中科技大学计算机操作系统实验报告两篇...

篇一:华中科技大学计算机操作系统实验报告

实验目的

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

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

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

一、实验要求

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

下的编程环境。

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

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

果。要求用到Linux下的图形库。

2、掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。

另编写一个应用程序,调用新增加的系统调用。

实现的功能是:文件拷贝;

3、掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动

程序,其功能可以简单。

实现字符设备的驱动;

4、了解和掌握/proc文件系统的特点和使用方法

了解/proc文件的特点和使用方法

监控系统状态,显示系统中若干部件使用情况

用图形界面实现系统监控状态。

5、设计并实现一个模拟的文件系统(选作)

二、实验一

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

要实现文件拷贝功能,主要用到的函数是fopen、fputc、fgetc。

主要用到的头文件:

#include

#include

设计思路:由scanf函数获取2个文件名,根据其文件名和路径分别打开该2个文件,设置一个循环,从源文件复制1个字节到目的文件,直到源文件指针到文件尾,最后关闭2个文件。

在可能出错的地方需要加上相应的’报错代码,并输出错误信息,以方便调试。

理清楚设计思路后,首先搭建linux下编程环境。

安装gcc: sudo apt-get install build-essential

安装codeblocks: sudo apt-get install codeblocks

在集成开发环境Code::Blocks IDE下根据需求写出相应的源代码copy.c ,将程序编译并生成exe可执行文件。

然后手动创建一个测试文件test.txt ,运行copy.exe文件,并输入

篇二:华中科技大学计算机操作系统实验报告

实验目的

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

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

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

一、 实验要求

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

下的编程环境。

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

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

果。要求用到Linux下的图形库。

2、 掌握系统调用的实现过程,通过编译内核方法,增加一个新的系统调用。

另编写一个应用程序,调用新增加的系统调用。

实现的功能是:文件拷贝;

3、 掌握增加设备驱动程序的方法。通过模块方法,增加一个新的设备驱动

程序,其功能可以简单。

实现字符设备的驱动;

4、 了解和掌握/proc文件系统的特点和使用方法

了解/proc文件的特点和使用方法

监控系统状态,显示系统中若干部件使用情况

用图形界面实现系统监控状态。

5、 设计并实现一个模拟的文件系统(选作)

二、 实验一

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

要实现文件拷贝功能,主要用到的函数是fopen、fputc、fgetc。

主要用到的头文件:

#include

#include

设计思路:由scanf函数获取2个文件名,根据其文件名和路径分别打开该2个文件,设置一个循环,从源文件复制1个字节到目的文件,直到源文件指针到文件尾,最后关闭2个文件。

在可能出错的地方需要加上相应的报错代码,并输出错误信息,以方便调试。

理清楚设计思路后,首先搭建linux下编程环境。

安装gcc: sudo apt-get install build-essential

安装codeblocks: sudo apt-get install codeblocks

在集成开发环境Code::Blocks IDE下根据需求写出相应的源代码copy.c ,将程序编译并生成exe可执行文件。

然后手动创建一个测试文件test.txt ,运行copy.exe文件,并输入

text.txt与target.txt。

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

程序源代码 copy.c:

#include

#include

int main******

{

char a[20],b[20];

scanf***"%s",a***;

get***;

scanf***"%s",b***;

FILE *p=NULL,*q=NULL;

p=fopen***a,"rb"***;

if***p==NULL***{printf***"%s default",a***;return 0;}

q=fopen***b,"wb+"***;

char c;

while******c=fgetc***p******!=EOF***

{

fputc***c,q***;

}

printf***"copy success"***;

return 0;

}

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

求用到Linux下的图形库。 安装Linux下的GTK+: sudo apt-get install build-essential

这将安装gcc/g++/gdb/make 等基本编程工具

sudo apt-get install gnome-core-devel

这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件 sudo apt-get install pkg-config

用于在编译GTK程序时自动找出头文件及库文件位置

sudo apt-get install devhelp

这将安装 devhelp GTK文档查看程序

sudo apt-get install libglib2.0-doc libgtk2.0-doc

这将安装 gtk/glib 的API参考手册及其它帮助文档

sudo apt-get install glade libglade2-dev

这将安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库

sudo apt-get install libgtk2.0*, gtk+2.0

所需的所有文件统通下载安装完毕

编写一个GTK+程序的基本步骤如下: 初始化Gtk 建立控件 登记消息与消息处理函数 执行消息循环函数gtk_main******

题名

初始化主要使用的函数有 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 *** //创建多少列

gint rows,

gint columns,

gint homogeneous***;

//创建多少栏 //用来决定表格如何来定大小 /*这个函数是将表格table,结合到窗口window里*/ gtk_container_add***GTK_CONTAINER***window***,table***;

gtk_widget_show***table***; // 显示该表格

/*要把物件放进box中,可用以下函数*/

void gtk_table_attach_defaults ***

GtkTable*table, //参数***"table"***是选定某表格

GtkWidget*widget, //***"child"***是想放进去的物件

gintleft_attach, //以下参数是指定把物件放在哪里, 及用多少个boxes

gintright_attach,

ginttop_attach,

gintbottom_attach***;

在Code::Blocks IDE创建GTK+工程如下流程:

首先在codeblocks选中File,然后选择New,最后Project。出现如上图所示界面。

在该界面中选中GTK+Project然后Go进入下一步。

继续Next,直到如下图输入工程名称与路径。

然后Next->Finish

这样,就创建了一个GTK+工程。

直接运行刚才创建的GTK+工程中的默认程序,得到一个包含2个按钮的窗口界面应用,如下图所示:

此时,可以按此模板修改源代码,也可以删除重写。

并发进程:

创建3个如上GTK+工程,生成3个不同的exe文件。

if ******p1=fork********* == 0***

{

execv***"../1",NULL***;

}

else if ******p2=fork*********==0***

{

execv***"../2",NULL***;

}

else if ******p3=fork******==0******

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验Linux系统的安装及用户界面的使用 一.实验目的 1. 了解Linux系统的安装、熟悉系统的启动过程和使用环境。 2. 掌握Linux环境下vi编辑器的使用方法。 3. 掌握Linux系统中编辑、编译、调试、运行一个C语言程序的全过程。 二.实验内容 1、实验要求 1. 在VMWare虚拟机环境或真实物理机器上,安装一个Linux操作系统。 2. 体验Linux操作系统中X Windows系统的使用。 3. 尝试Linux系统键盘命令的使用,并熟练掌握常用的基本命令。 4. 掌握命令行方式下vi编辑器的使用。 5. 编写一段C程序,使用系统调用fork()创建两个子进程。各进程显示不同的信息,如父进程显示字符“a”,子进程分别显示字符“b”和“c”。多次运行观察显示结果,并分析产生这种执行效果的原因。 实验Linux进程控制 一.实验目的 1. 掌握进程的概念,明确进程和程序的区别。 2. 认识和了解并发执行的实质。 二.实验内容 1、实验要求 1. 编写一段程序,使用系统调用fork()创建两个子进程。各进程显示不同的信息,如父进程显示字符“a”,子进程分别显示字符“b”和“c”。多次运行观察显示结果,并分析产生这种执行效果的原因。 2. 修改上面编写的程序,将每个进程的输出由单个字符改为循环输出一句话,如父进程显示:“parent:”加上进程ID,子进程分别显示:“Child1:”(或“Child2:”)加上自己的进程ID。再观察程序执行时屏幕上出现的现象,并分析原因。 3.一个父进程创建一个子进程,子进程通过exec系统调用执行另一个文件。各自的代码中显示不同的信息,观察其运行结果,分析两个进程并发执行的效果。 4. 编写程序创建如图所示的进程树,在每个进程中显示当前进程ID和父进程ID。 实验Linux进程间通信 一.实验目的 (1) 分析进程争用临界资源的现象,学习解决进程互斥的方法; (2) 学习如何利用进程的“软中断”、管道机制进行进程间的通信,并加深对上述通信机制的理解; (3) 了解系统调用pipe( )、msgget( )、msgsnd( )、msgrcv( )、msgctl( )、shmget( )、shmat( )、shmdt( )、shmctl( )的功能和实现过程,利用共享存储区机制进行进程间通信。 二、实验内容 1、实验要求 (1) 进程的控制 修改已编制的程序,将每个进程输出一个字符修改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析出现问题的原因,进一步理解各个进程争夺临界资源的情况。 如果在程序中使用系统调用locking( )来给每一个进程加锁,可以实现进程之间的互斥,试观察并分析出现的现象。 (2) 进程的软中断通讯 编制一段程序,实现进程的软中断通讯:使用系统调用fork( )创建两个子进程;再使用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按Del键);在捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发信号;子进程捕捉到信号后分别输出下列信息后终止: Child process1 is killed by parent! Child process2 is killed by parent! 父进程等待两个子进程都终止以后,输出如下信息后终止: Parent process in killed! (3) 进程的管道通讯 编制一段程序,实现进程的管道通讯:使用系统调用pipe( )建立一条管道线;两个子进程分别循环向这条管道写一句话: Child 1 is sending a message! Child 2 is sending a message! 而父进程则循环从管道中读出信息,显示在屏幕上。 实验报告 内含源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值