版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、滨江学院课程设计报告题 目 Linux 课程设计 院 系 计 算 机 系 专 业 软 件 工 程 学生姓名 学 号 20112344 2014年6月11日一、 Shell编程题(1) 编写一个shell脚本,求费波纳奇数列的前20项及总和。程序源码如下:运行结果如图:(2) 在根目录下有四个文件 m1.txt,m2.txt,m3.txt,m4.txt,用 Shell 编程,实现自动 创建 m1,m2,m3,m4 四个目录,并将 m1.txt,m2.txt,m3.txt,m4.txt 四个文件分别拷贝到各自相应的目录下。程序运行之前目录结果如下:程序源码如下:运行之后目录结构如下:(3) 编写s
2、hell程序,使得使用者输入一个文档名,做出以下判断:a) 这个文件是否存在,若不存在则给予一个“Filename does not exist”的信息,并中断程序;b) 若这个文件存在,则判断他是个文件或目录,结果输出“Filename is regular file”或“Filename is directory”;c) 判断一下,运行者的身份对这个文件或目录所拥有的权限,并输出权限数据!输入一个不存在的目录结果如下:程序源码如下:输入一个已存在的目录,得到权限信息如下:(4) 设计一个shell程序cuts,它由标准输入读取数据,获取由第一个参数n和第二个参数m所限定范围的数据,n和m都
3、是整数。即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)。例如:$cuts 11 14 This is a test of cuts program (键盘输入)test (显示结果)程序源码如下:程序运行结果如下:二、 Linux下C语言程序设计课程设计1.课题简介基于Socket和多线程编程的聊天程序实现,网络聊天程序设计非常复杂,允许多个人同时聊天更加需要多线程技术的支持,请实现一个简单的多线程网络聊天程序模拟。2设计概要2.1 设计思路分析1.在网络越来越发达的今天,人们对网络的依赖越来越强,网络聊天已经成了许多人生活中必不可少的一部分,基于这样的需求,出现
4、了许多网络聊天通信工具,像QQ,MSN等等,但是人们已经不再满足于单一的两个人之间的聊天,而是对多人同时聊天产生了兴趣,于是出现了网络聊天室,不同地方的人可以在那个虚拟的聊天室里面热烈聊天。基于这样的想法,我们用shell编程设计一个多人同时聊天的小程序,用Socket编程实现网络通讯,面向连接的,采用多线程的实现技术。2. 在程序中,可以设置加入连接的最大数目,通过更改IP地址和端口号,成为不同的客户端,与服务器端连接,进行多用户聊天。2,2 概要设计该网络聊天程序大致分为三个主要部分:客户端、服务器端和用户图形界面。各个部分的初步设计思想、流程及存储结构
5、如下:1. 程序整体框架:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。 1.打开Socket 2,命名 3.监听端口 4.建立连接 5.接收消息 6.关闭连接 7.打开Socket 8.打开Socket 8.连接服务器 9.收发消息 10。关闭连接 2. 客户端功能模块客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个端口。(1
6、)连接服务器连接服务器之前需要解析服务器地址,创建套接字,设置相关参数。(2)发送功能3. 服务器端功能模块(Server)服务器端,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 3.代码实现(1)客户端代码#include <stdlib.h>#include <stdio.h>#include <errno.h>#include &l
7、t;string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define TRUE 1#define PORT 1000 static int sockfd;void recvfromserver() /接受服务器消息线程入口函数char mes1024;int nbytes=0;while(1)memset(mes,0,sizeof(mes);nbytes=read(sockfd,mes,sizeof(m
8、es);if(nbytes>0)mesnbytes='0'printf("%sn",mes);pthread_exit(NULL);int main(int argc, char *argv)/int sockfd;char buffer1024;struct sockaddr_in server_addr;struct hostent *host;int portnumber,nbytes;char *strhost="127.0.0.1"char clientname20;char password20;char mes1024
9、;int thr_id; /* thread ID for the newly created thread */pthread_t p_thread; /* thread's structure */if(argc!=1)fprintf(stderr,"Usage:%s an",argv0);exit(1);if(host=gethostbyname(strhost)=NULL)fprintf(stderr,"Gethostname errorn");exit(1);/* 客户程序开始建立 sockfd 描述符 */printf("正
10、在建立套接口.n");if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,"Socket Error:%san",strerror(errno);exit(1);/* 客户程序填充服务端的资料 */bzero(&server_addr,sizeof(server_addr);server_addr.sin_family=AF_INET;server_addr.sin_port=htons(PORT);server_addr.sin_addr=*(struct in_addr *)host-&g
11、t;h_addr);printf("套接口创建成功,正在链接服务器.n");/* 客户程序发起连接请求 */if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)=-1)fprintf(stderr,"Connect Error:%san",strerror(errno);exit(1);/* 连接成功了 */printf("链接服务器成功n欢迎来到聊天室!n");printf("请输入你的用户昵称:n");sc
12、anf("%s",clientname);printf("请输入登录密码:n");scanf("%s",password); printf("n登陆成功");/write(sockfd,clientname,sizeof(clientname);printf("n开始聊天("Quit"断开连接)nn");thr_id = pthread_create(&p_thread, NULL, recvfromserver, NULL);while(1)memset(buffe
13、r,0,sizeof(buffer);memset(mes,0,sizeof(mes);scanf("%s",buffer);strcat(mes,clientname);strcat(mes,":");strcat(mes,buffer);/printf("main thread %sn",mes);if(write(sockfd,mes,sizeof(mes)=-1)fprintf(stderr,"Write Error:%sn",strerror(errno);exit(1);if(strcmp(buffer
14、,"Quit")=0)break;/* 结束通讯 */close(sockfd);exit(0);(2)服务器代码#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#define MAXLINE 1000 /在一条
15、消息中最大的输出字符数#define LISTENQ 20 /最大监听队列#define PORT 1000 /监听端口#define MAXFD 20 /最大的在线用户数量void *get_client(void *); int sockfd,i;static int maxi=0;/maxi表示当前client数组中最大的用户的i值static int clientMAXFD;void recvandsend(void) /监听转发线程入口函数int index=0;int nbytes=0;char buffer1024;int len;int outindex=0;while(1)i
16、f(maxi>0)memset(buffer,0,sizeof(buffer);nbytes=0;/index+;nbytes=read(clientindex+,buffer,sizeof(buffer);/printf("%d,%dn",index,clientindex);if(nbytes>0)buffernbytes='0'printf(" %sn",buffer);outindex=0;while(outindex<maxi)if(write(clientoutindex+,buffer,sizeof(buf
17、fer)=-1)fprintf(stderr,"Write Error:%sn",strerror(errno);exit(1);if(index>=maxi)index=0;pthread_exit(NULL);int main(int argc, char *argv)/int client_fdLISTENQ,clientnum=0;struct sockaddr_in server_addr;struct sockaddr_in client_addr;int sin_size,portnumber;char hello="Hello! Are Yo
18、u Fine?n"int thr_id; /* thread ID for the newly created thread */pthread_t p_thread; /* thread's structure */int new_fd=0;memset(client,0,sizeof(client);if(argc!=1)fprintf(stderr,"Usage:%s portnumberan",argv0);exit(1);/* 服务器端开始建立 socket 描述符 */if(sockfd=socket(AF_INET,SOCK_STREAM,0
19、)=-1)fprintf(stderr,"Socket error:%sna",strerror(errno);exit(1);/* 服务器端填充 sockaddr 结构 */bzero(&server_addr,sizeof(struct sockaddr_in);server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=htonl(INADDR_ANY);server_addr.sin_port=htons(PORT);/* 捆绑 sockfd 描述符 */if(bind(sockfd,(struct
20、sockaddr *)(&server_addr),sizeof(struct sockaddr)=-1)fprintf(stderr,"Bind error:%sna",strerror(errno);exit(1);printf("服务器监听端口%d.n",PORT);/* 监听 sockfd 描述符 */if(listen(sockfd,LISTENQ)=-1)fprintf(stderr,"Listen error:%sna",strerror(errno);exit(1);thr_id = pthread_create(&p_thread, NULL, recvandsend, NULL);printf(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妊娠晚期GDM血糖管理的临床策略
- 城建公司考试题及答案
- 鼻肠管护理试题及答案
- 保育员职业素养考试题及答案
- 妇科肿瘤标志物联合筛查策略
- 大数据赋能医院管理:效率提升的关键策略
- 大数据在社区慢病环境风险预测中的应用
- 多院区医疗物资智能仓储的统一调配方案
- 多维度满意度数据挖掘与决策支持
- 多组学指导下的骨肉瘤新辅助治疗策略
- 2026春招:中国烟草真题及答案
- 急性酒精中毒急救护理2026
- 2021-2022学年天津市滨海新区九年级上学期物理期末试题及答案
- 江苏省苏州市、南京市九校2025-2026学年高三上学期一轮复习学情联合调研数学试题(解析版)
- 2026年中国医学科学院医学实验动物研究所第三批公开招聘工作人员备考题库及答案详解一套
- 2025年幼儿园教师业务考试试题及答案
- 国家开放大学《Python语言基础》形考任务4答案
- 2026年护理部工作计划
- DL-T976-2017带电作业工具、装置和设备预防性试验规程
- 烹饪原料知识 水产品虾蟹类
- 考勤抽查记录表
评论
0/150
提交评论