《linux操作系统设计实践》

上传人:ldj****22 文档编号:32955041 上传时间:2018-02-13 格式:DOC 页数:14 大小:109.50KB
返回 下载 相关 举报
《linux操作系统设计实践》_第1页
第1页 / 共14页
《linux操作系统设计实践》_第2页
第2页 / 共14页
《linux操作系统设计实践》_第3页
第3页 / 共14页
《linux操作系统设计实践》_第4页
第4页 / 共14页
《linux操作系统设计实践》_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《《linux操作系统设计实践》》由会员分享,可在线阅读,更多相关《《linux操作系统设计实践》(14页珍藏版)》请在金锄头文库上搜索。

1、LINUX 操作系统设计实践实验(小组)报告20072008学年第一学期学院: 数学与计算机学院 专业: 计算机科学与技术 班级 1班 组长:张伟华 学号: 040500004 组员:白鸿达 030501103 王凡 030501121报告时间: 2008-1-8 任课教师: 郭朝珍,程烨 实验三 综合应用实验【实验目的】本实验旨在提高对系统软件(操作系统)的理解。提高在 Linux 操作系统下的系统编程的综合能力。【实验预备内容】阅读教材linux C 编程及相关资料,充分了解进程间通信、控制、并发的方法,及 Linux 环境下开发程序的方法。【实验内容】在实验 1 和实验 2 的基础上,灵

2、活应用 Linux 操作系统的系统功能调用,结合以前学过的操作系统知识,在基本要求的基础上,自由设定应用背景,写出具有某些应用意义的综合程序,题材不限,要求支持多用户,例如:生产者消费者问题,客户机服务器模型类的程序方案(如买票)等。程序的运行和输出结果要求能够体现出运行的流程以及一定的时序关系,便于演示和理解;进程的等待,进程间的通信状态等信息要显示在界面上。【实验要求】在 linux 下编程实现服务端与客户端的通信【综合应用设计的需求分析及设计思路】在售票系统中加入了以下几个功能:1、用户注册:为本系统的安全做保障2、售票:本系统的核心3、查票:查询票的种类、剩佘数目及票价4、新增票:增加

3、票种5、换票:改变某种票的数量【程序流程图】1、查票2、买票3、加票4、换票0、退出运行程序查看票信息退出用户登入加入相应票完成注册买票注册用户继续ny退出输入票名及数量ny继续购买yn【程序代码及分析说明】struct Msguser/used for msg 用于消息long mtype;int csid;int op;int num;int numbers;char username50;char userpwd50;user;int user_init();/用户初始化int ticket_init();票初始化int login();登陆void ticket_list(int);列

4、出票情况int ticket_book(int,int);买票int newuser();新增用户int newticket();新增票int changticket(int,int);换票【实验运行环境(软硬件等) 】在 linux 虚拟机下编译,运行程序【实验编译运行情况(包括运行界面) 】首先运行服务端程序,再运行客户端程序。在客户端可以看到登陆,注册用户,查看票数,买票,以及新增票和改变票数(后面两个主要是用于服务端的初始化数据,做在客户端模拟) 。首先先按 2 注册一个用户,输入用户名,输入密码,再次输入密码,若一样才会成功,若不一样会要求重输,在服务端会打出 addnewuser。

5、成功后会返回上一个界面。这时要可以登陆。按进入,输入用户名,输入密码送到服务端,验证正确后服务端会打印出 login,并发消息给客户端通知成功,并在客户端显成登陆成功,否则会提示错误,重新选择。接下来用户可以选择查看票数或买票。首先先按 3 查看票数。这样发送一个信号到服务端后,服务端会将最新情况用消息传给客户端,并在客户端上显示票的代码,票的目的地以及票数。显示如下Code arrive address numbers1 beijing 202 fuzhou 503 guangzhou 35Press 1 to book ticket or press 2 to back这样,按可以返回。按

6、可以买票进入买票界面,提示 input ticket code and numbers to buy输入25,这样就可以购买到 fuzhou 的票张。将信息传送到服务端后,服务端会判断是否轮到可以购买,是的话判断否剩余的票大于所需的数目,是即可以购买,否则不能购买,返回。(作为用于服务端初始化的新增票和改变票数主要是为了对服务端进行设置,当选择新增票,会要求输入票的目的地以及票数,并将其写入文件中保存,还有刚才上面的操作也都会写入文件保存。改变票数则是当票数为 0 或不足时可以更新。操作与买票大致相同。 )【设计的优缺点及改进方向】程序界面简洁,结构清晰,就于进程通信有了很好的运用,还有进文件

7、的读与写操作,采用二进制流的方法,用以结构为单位进行读写,这样可以快速,有效的进行信息交换。由于采用了消息队列,服务端本应采用当有一个新的客户端就应采用 fork 新建一个进程去处理,然后采用信号灯对资源进行同步互斥的加锁,但想到如果客户端很多,这样效率非常低,所以一时没有采用这种方法,但由于消息队列本身就有排队了,而服务端接收一个消息处理一个,也就相当于有了加锁的相似之处,但这样如果用户数量众多,处理就不是那么快了。还有在对文件的操作,本应采用数据库的,但由于条件限制,没有办法采用数据库操作,再者功能上还是相对简单了些,没有再丰富一下比如说票的价格等。【小组成员分工说明】组长:张伟华。组织组

8、员进行讨论,要选择什么样的类型进行模拟,确定之后,又讨论了要实验哪些功能,应采用哪些技术进行应用,比如采用了消息队列,而没有采用共享存储区。还有如何实现功能块,对服务端的代码进行编写。对客户端的代码进行修改,如操作步骤更顺畅,优化代码。组员:白鸿达,在讨论后画了程序的流程图,根据流程图写了客户端的界面,对服务端功能模块进行了检查以及提出意见并一起参与修改。负责本组功能的检查,以及查找了一些的资料。组员:王凡,参加了讨论,根据讨论写了程序的数据结构,哪些需要的参数,还有文件读写采用二进制的提出,以及了读写操作的代码。【其他需补充说明的事项】在实现上遇到了一个问题就是,运行客户端后,任选一个进行操

9、作都可以正确的运行,当继续进行时,选择其它功能,竟发现不能正确运行了,服务端没有收到客户端发送的消息,只能关掉客户端再打开,选择新操作。我仔细分析了一下,是客户端消息的大小发生了变化,我采用了sizeof(USER),所以应该对不同的操作采用线程才不会出错。【附录源程序代码】*service.c*/#include#include#include#include#include#include#define MSGKEY 75struct Userchar username50;/username 用户名char userpwd50;/pwd 密码myuser50;struct Ticketi

10、nt num;/code 票代号char address50;/arrive address 目的地int numbers;/数量myticket50;struct Msguser/used for msg 用于消息long mtype;int csid;int op;int num;int numbers;char username50;char userpwd50;user;struct Msgticket/used for msg 用于消息long mtype;int num;char address50;int numbers;ticket;int count_user=0;int c

11、ount_ticket=0;int msgqid;int msgqid1;typedef struct User USER;typedef struct Ticket TICKET;typedef struct Msguser MSGUSER;typedef struct Msgticket MSGTICKET;int user_init();int ticket_init();int login();void ticket_list(int);int ticket_book(int,int);int newuser();int newticket();int changticket(int,

12、int);main()int op,i,pid;int msgqid=msgget(MSGKEY,IPC_CREAT|0777);int msgqid1=msgget(76,IPC_CREAT|0777);if(user_init()!=1)printf(user.dat open faild 锛?n);if(ticket_init()!=1)printf(ticket.dat open faild!/n);extern cleanup();for(i=0;i#include#include#include#include#include#define MSGKEY 75struct Msgu

13、ser/used for msglong mtype;int csid;int op;int num;int numbers;char username50;char userpwd50;user;struct Msgticket/used for msglong mtype;int num;char address50;int numbers;ticket;int pid,msgqid,msgqid1;typedef struct Msguser MSGUSER;typedef struct Msgticket MSGTICKET;main()char d;int key_in;char t

14、emppwd50;pid=getpid();msgqid = msgget(MSGKEY,0777);/set the dulei 建立消息队列msgqid1 = msgget(76,0777);/set the dulei 建立消息队列user.mtype=1;/make the mtype 定义消息类开型ticket.mtype=1;l:printf(-* 1 login *-n);printf(-* 2 add user *-n); printf(-* 3 list the ticket! *-n);/列票printf(-* 4 buy the ticket *-n);/买票printf(-* 5 add the ticket *-n);/增加票printf(-* 6 set the ticket -n);/改变票数printf(-* 0 exit *-n);scanf(%d,if(key_in=1)printf(请输入用户名n);scanf(%s,/system(cls);printf(请输入密码n);scanf(%s,user.csid=pid;user.op=1;msg

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号