Linux课程设计
更新时间:2024-06-22 22:34:01 阅读量: 综合文库 文档下载
滨江学院
课程设计报告
题 目 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) 编写shell程序,使得使用者输入一个文档名,做出以下判断:
a) 这个文件是否存在,若不存在则给予一个“Filename does not exist”的信息,并中断程序; b) 若这个文件存在,则判断他是个文件或目录,结果输出“Filename is regular file”或“Filename is
directory”;
c) 判断一下,运行者的身份对这个文件或目录所拥有的权限,并输出权限数据! 输入一个不存在的目录结果如下:
程序源码如下:
输入一个已存在的目录,得到权限信息如下:
(4) 设计一个shell程序cuts,它由标准输入读取数据,获取由第一个参数n和第二个参数m所限定范
围的数据,n和m都是整数。即从输入的字符串中抽取第n个字符至第m个字符之间的所有字符(包括这两个字符)。例如: $cuts 11 14
This is a test of cuts program (键盘输入) test (显示结果)
程序源码如下:
程序运行结果如下:
二、
Linux下C语言程序设计—课程设计
1.课题简介
基于Socket和多线程编程的聊天程序实现,网络聊天程序设计非常复杂,允许多个人同时聊天更加需要多线程技术的支持,请实现一个简单的多线程网络聊天程序模拟。
2设计概要
2.1 设计思路分析
1.在网络越来越发达的今天,人们对网络的依赖越来越强,网络聊天已经成了许多人生活中必不可少的一部分,基于这样的需求,出现了许多网络聊天通信工具,像QQ,MSN等等,但是人们已经不再满足于单一的两个人之间的聊天,而是对多人同时聊天产生了兴趣,于是出现了网络聊天室,不同地方的人可以在那个虚拟的聊天室里面热烈聊天。基于这样的想法,我们用shell编程设计一个多人同时聊天的小程序,用Socket编程实现网络通讯,面向连接的,采用多线程的实现技术。
2. 在程序中,可以设置加入连接的最大数目,通过更改IP地址和端口号,成为不同的客户端,与服务器端连接,进行多用户聊天。
2,2 概要设计
该网络聊天程序大致分为三个主要部分:客户端、服务器端和用户图形界面。各个部分的初步设计思想、流程及存储结构如下:
1.程序整体框架:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。
1.打开Socket 2,命名 3.监听端口 4.建立连接 5.接收消息 6.关闭连接 7.打开Socket 8.打开Socket 8.连接服务器 9.收发消息 10。关闭连接
2. 客户端功能模块
客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个端口。
(1)连接服务器
连接服务器之前需要解析服务器地址,创建套接字,设置相关参数。
2)发送功能
(
3. 服务器端功能模块(Server)
服务器端,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
3.代码实现
(1)客户端代码
#include
#define TRUE 1 #define PORT 1000
static int sockfd;
void recvfromserver() //接受服务器消息线程入口函数 { char mes[1024]; int nbytes=0;
while(1) { memset(mes,0,sizeof(mes)); nbytes=read(sockfd,mes,sizeof(mes)); if(nbytes>0) { mes[nbytes]='\\0'; printf(\
}
}
pthread_exit(NULL);
}
int main(int argc, char *argv[]) {
// int sockfd; char buffer[1024];
struct sockaddr_in server_addr; struct hostent *host; int portnumber,nbytes; char *strhost=\ char clientname[20]; char password[20]; char mes[1024];
int thr_id; /* thread ID for the newly created thread */
pthread_t p_thread; /* thread's structure */
if(argc!=1) { }
if((host=gethostbyname(strhost))==NULL) { }
/* 客户程序开始建立 sockfd 描述符 */ printf(\正在建立套接口...\\n\
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-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->h_addr); printf(\套接口创建成功,正在链接服务器...\\n\/* 客户程序发起连接请求 */
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) { }
/* 连接成功了 */
printf(\链接服务器成功\\n欢迎来到聊天室!\\n\printf(\请输入你的用户昵称:\\n\scanf(\printf(\请输入登录密码:\\n\scanf(\
fprintf(stderr,\exit(1);
fprintf(stderr,\exit(1);
fprintf(stderr,\exit(1);
fprintf(stderr,\exit(1);
printf(\登陆成功\
// write(sockfd,clientname,sizeof(clientname)); }
(2)服务器代码 #include
thr_id = pthread_create(&p_thread, NULL, recvfromserver, NULL); while(1) { }
/* 结束通讯 */ close(sockfd); exit(0);
memset(buffer,0,sizeof(buffer)); memset(mes,0,sizeof(mes)); scanf(\ strcat(mes,clientname); strcat(mes,\strcat(mes,buffer);
if((write(sockfd,mes,sizeof(mes)))==-1) { }
if(strcmp(buffer,\{ }
break;
fprintf(stderr,\exit(1);
printf(\开始聊天@(\\\断开连接)\\n\\n\
// printf(\
#include
#define MAXLINE 1000 //在一条消息中最大的输出字符数 #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 client[MAXFD];
void recvandsend(void) //监听转发线程入口函数 {
int index=0; int nbytes=0; char buffer[1024]; int len; int outindex=0; while(1) {
if(maxi>0) {
memset(buffer,0,sizeof(buffer)); nbytes=0;
//index++;
nbytes=read(client[index++],buffer,sizeof(buffer)); printf(\if(nbytes>0) {
buffer[nbytes]='\\0'; printf(\outindex=0;
while(outindex if(write(client[outindex++],buffer,sizeof(buffer))==-1) { fprintf(stderr,\exit(1); // } } } if(index>=maxi) index=0; } pthread_exit(NULL); } int main(int argc, char *argv[]) { // int client_fd[LISTENQ],clientnum=0;; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin_size,portnumber; char hello[]=\ 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,\ exit(1); } /* 服务器端开始建立 socket 描述符 */ if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { fprintf(stderr,\ 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 sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) { } printf(\服务器监听端口%d...\\n\/* 监听 sockfd 描述符 */ if(listen(sockfd,LISTENQ)==-1) { } thr_id = pthread_create(&p_thread, NULL, recvandsend, NULL); printf(\欢迎来到聊天室!!!\\n\while(1) { } close(sockfd); exit(0); /* 服务器阻塞,直到客户程序建立连接 */ if(maxi>=20) { } sin_size=sizeof(struct sockaddr_in); if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1) { } /*fprintf(stderr,\client[maxi++]=new_fd; printf(\新用户进入聊天室%d\\n\ fprintf(stderr,\exit(1); printf(\以达到人数上线\\n\continue; fprintf(stderr,\exit(1); fprintf(stderr,\exit(1); 4调试分析与测试结果 1.Server端 打开server端 2.客户端打开,新用户登录并输入了地址,昵称 3.服务端显示 4.客户端显示 第二个用户登录 四 课程设计总结 通过本次试验,我了解了网络通信的基本知识,同时对于Linux中网络通信编程也有了初步的了解,实验过程中基本理解了网络通信中服务器端、客户端的工作过程。这次试验主要是在Linux环境下完成的,所以操作的并不是非常的顺利,平时还需要多做此方面的练习。
正在阅读:
Linux课程设计06-22
助理物流师考试历年真题与答案03-09
中小学班主任情景答辩题目及答案05-28
会计基础经济业务练习习题10-22
希腊三种古典柱式05-15
2010学年《物流法律法规》期中试卷05-23
总包与分包单位安全管理协议书11-16
书法不同字体的毛笔选择12-20
校园相声台词爆笑简单两人07-30
PS抠图方法05-11
- 2009中西部家居博览会总体策划
- 2009 Revit 1级工程师学生用
- 天津地铁建设工程试验检测机构管理办法(TJDT-ZY-AQ-29)
- 新四年级数学暑期班第七次教案
- 机械制造企业隐患排查治理检查表 - 图文
- 2008届全国百套高考数学模拟试题分类汇编-103概率与统计解答题 -
- 职场健身防病试题及答案
- Excel操作技巧大全II - --数据输入和编辑技巧
- 南开大学2018春季《行政管理学》离线作业考核答案
- 2015年医师定考简易程序试卷及答案
- 新《预算法》对行政事业单位预算管理的挑战解读
- 轴的课件
- 电动汽车充电桩设计 毕业论文
- 必修2、选修2-1、1-1期末模拟试题2
- 桌面远程运维管理系统实施-可行性研究报告120306
- 西气东输水土保持工程工作总结 - 图文
- 正宁县基本县情及经济社会发展情况简介
- SATWE参数设置(巨详细)
- 儒家法思想研究综述
- 生活家政服务电子商务平台建设运营整合方案书【审报完稿】
- 课程
- 设计
- Linux
- 全国计算机等级考试二级officeppt演示文稿题目
- 新!10级(4)通信工程--电磁场与电磁波实验指导书-李路
- 六盘水市钟山区节水灌溉示范项目监理工作报告 - 图文
- 互联网留学网:南加州大学表演系
- 房建技术标文件
- 2018年广西二级建造师必修课网络学习考试(含答案)-2
- 2018年宝鸡市中考物理全真模拟试题6详细答案
- 七年级地理上:第一节天气和气候学案(湘教版)
- 脐针临证 doc
- 李小楼小学教育志 - 图文
- 初三语文答题技巧议论文及说明文
- 电话营销策略
- 上市公司日常信息披露工作备忘录 第一号 (续1)临时公告格式指引
- 人教版新版部编版初中语文九年级上册优质课教案5我看
- 项目项目执行情况总结
- 南京工业大学2015年综合评价录取招生简章
- 必修二 unit1 词汇检测
- 道路施工方案与技术措施
- (盐城工学院数据结构课程设计)栈的应用表达式求值
- 水土保持工程竣工验收施工总结报告 - 图文