Linux课程设计.docx
- 文档编号:2422832
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:13
- 大小:107.58KB
Linux课程设计.docx
《Linux课程设计.docx》由会员分享,可在线阅读,更多相关《Linux课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
Linux课程设计
Linux操作系统与程序设计课程设计B报告书
题目:
基于Socket的并发文件操作软件设计与实现
姓名:
学号:
109074047
班级:
计102
专业:
计算机科学与技术
指导老师:
提交日期:
1、实验项目目的
《Linux操作系统课程设计B》是一门在课程《Linux操作系统与程序设计B》后独立开设的实验课程。
这一门实验课程的开设目的是为了通过学生独立完成一个基于Linux平台的较大型应用程序,巩固课堂上学到的Linux平台上的编程规范、技术和技巧,培养学生的编写较大型程序的能力和提高学生综合应用素质。
本课程设计实验主要围绕Linux平台上主流的基础技术展开,这些技术包括:
Linux的进程、线程通信和同步技术;socket网络通信技术等,这些技术可以集中体现并应用在并发程序设计中。
通过并发程序的设计与开发,培养学生底层软件开发的能力,并为将来从事UNIX/Linux平台开发、嵌入式开发等相对高端的软件开发工作打下基础。
2、实验项目的功能及模块划分
本实验是一个Linux下的并发程序。
基本功能有通过Socket,一个进程接收并传送用户操作命令以及相关操作数据等;另一进程收到该命令后,先分析该命令,然后真真完成该命令的具体操作。
在此基础上,还具有接收用户输入方式为图形化界面;容许一次传送多个命令(主要是传送的数据格式支持多个命令)等功能。
3、设计与实现
3.1系统结构
3.1.1系统结构图
3.2发送进程
3.2.1基本功能
主菜单、通过socket传送命令和操作数据给另一个进程,命令包括:
添加学生信息、删除学生信息、修改学生信息、显示学生信息。
一次允许传送多个命令。
3.3接收进程的实现
3.3.1基本功能
进程收到该命令后,先分析该命令,然后完成该命令的具体操作。
4数据库访问或文件操作
4.1文件操作
学生基本信息存储在文件stu.info中,该文件相关的结构可以按照以下方式定义:
structstu_info{
charstu_num[12];
charname[10];
charzhuanye[10];
shortintsex;
charmobile_phone[12];
};
对文件的操作主要是通过系统调用来实现的,其中包括打开和创建文件(open、creat)、读写文件(write、read)和文件定位(lseek)。
对文件的删除使用的系统调用system调用/bin/sh执行rm命令实现,即system(“rm-fstu.info”);
5通信模块的实现
5.1通信方式的选择
进程通信方式选择的socket,因为进行通信的进程不可能局限于单机,更多的时候是网络中不同主机进程间的通信,通信的数据结构也可以根据需要自行进行定义。
进程通信多数情况下是多进程,在服务器通过实现并发服务器能够很好的让服务器和多个客户端进程间进行通信。
6、测试与调试
(1)客户端与服务器建立连接
客户端的主菜单:
服务器(打印连接信息)
(2)添加学生信息
客户端:
服务器:
(3)修改学生信息
客户端:
服务器:
(4)删除学生信息
客户端:
服务器:
(5)显示学生信息
客户端:
服务器:
(6)并发处理多客户
客户端:
一个添加信息,一个查看信息
服务器:
7、总结
附录:
程序代码
源代码由三个文件组成:
net.h、server.c和client.c
//net.h
#include
#include
#include
#include
#include
#include
#include
#include
#include
#definePORT3000
structstu_info{
charstu_num[12];
charname[10];
charzhuanye[10];
shortintsex;
charmobile_phone[12];
};
structmsg_buffer{
charcmd;
charcmd_param[12];
structstu_infostu;
};
//*******************************************************************
//client.c
#include"net.h"
structmsg_buffermsg[20];
staticintmsg_count=0;
charmenu()
{
system("clear");
printf("-------------------------------------\n");
printf("*(a)AddStudentInformation\n*\n");
printf("*(m)ModifyStudentInformation\n*\n");
printf("*(d)DeleteStudentInformation\n*\n");
printf("*(s)ShowStudentInformation\n*\n");
printf("*(e)TheEndOfCommandInput\n*\n");
printf("-------------------------------------\n");
printf("Input/a/m/d/s/e:
");
scanf("%c",&msg[msg_count].cmd);
returnmsg[msg_count].cmd;
}
voidaddStuInfo()
{
system("clear");
printf("\n\nInputtheinformationyouwanttoadd\n");
printf("Num:
");
scanf("%s",msg[msg_count].stu.stu_num);
printf("Name:
");
scanf("%s",msg[msg_count].stu.name);
printf("Sex(1/0):
");
scanf("%d",&msg[msg_count].stu.sex);
printf("zhuanye:
");
scanf("%s",msg[msg_count].stu.zhuanye);
printf("MobilePhone:
");
scanf("%s",msg[msg_count].stu.mobile_phone);
}
voidmodifyStuInfo()
{
system("clear");
printf("\n\nInputthestudentnumofmodify\n");
scanf("%s",msg[msg_count].cmd_param);
printf("Inputtheinformationyouwanttomodify\n");
printf("Num:
");
scanf("%s",msg[msg_count].stu.stu_num);
printf("Name:
");
scanf("%s",msg[msg_count].stu.name);
printf("Sex(1/0):
");
scanf("%d",&msg[msg_count].stu.sex);
printf("zhuanye:
");
scanf("%s",msg[msg_count].stu.zhuanye);
printf("MobilePhone:
");
scanf("%s",msg[msg_count].stu.mobile_phone);
}
voiddeleteStuInfo()
{
system("clear");
printf("\n\nInputthestudentnumofdelete\n");
scanf("%s",msg[msg_count].cmd_param);
}
voidshowStuInfo()
{
system("clear");
printf("\n\nShowCommandisinput,pressEnter.....\n");
getchar();
getchar();
}
intendOfInput()
{
printf("\nCommandInputisfinish.....PressEnter\n");
getchar();
getchar();
return1;
}
intmain(intargc,char*argv[])
{
intflag,sockfd;
structsockaddr_inclient_addr;
sockfd=socket(AF_INET,SOCK_STREAM,0);
bzero(&client_addr,sizeof(client_addr));
client_addr.sin_family=AF_INET;
client_addr.sin_port=htons(PORT);
inet_aton(argv[1],&client_addr.sin_addr);
bind(sockfd,(structsockaddr*)&client_addr,sizeof(client_addr));
if(connect(sockfd,(structsockaddr*)&client_addr,sizeof(structsockaddr))==-1){
fprintf(stderr,"connecterror%s\n",strerror(errno));
exit(0);
}
while
(1){
switch(menu()){
case'a':
addStuInfo();break;
case'm':
modifyStuInfo();break;
case'd':
deleteStuInfo();break;
case's':
showStuInfo();break;
case'e':
flag=endOfInput();break;
default:
printf("Inputthechoice\n");
}
msg_count++;
if(flag==1){
if(write(sockfd,&msg_count,sizeof(int))==-1)
fprintf(stderr,"writeerror%s\n",strerror(errno));
if(write(sockfd,msg,sizeof(structmsg_buffer)*msg_count)==-1)
fprintf(stderr,"writeerror%s\n",strerro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)