博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017-2018-1 20155229 实验三 实时系统
阅读量:6361 次
发布时间:2019-06-23

本文共 1436 字,大约阅读时间需要 4 分钟。

2017-2018-1 20155229 实验三 实时系统

实验目的

  • 了解实时系统的信息、特点等内容。
  • 学习客户端和服务器之间的工作原理,并编写代码实现。

实验步骤

实验三-并发程序-1

  • 学习使用Linux命令wc(1)
  • 基于Linux Socket程序设计实现wc(1)服务器(端口号是你学号的后6位)和客户端
  • 客户端传一个文本文件给服务器
  • 服务器返加文本文件中的单词数

wc命令的功能:

832288-20171118102051640-1069062121.jpg

统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。

wc命令的参数
  • -c 统计字节数。
  • -l 统计行数。
  • -m 统计字符数。这个标志不能与-c 标志一起使用。
  • -w统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
  • -L 打印最长行的长度。

832288-20171118100905484-2103422992.jpg

386 1525 12288 test.txt
行数 单词数 字节数 文件名

wc命令只打印统计数字不打印文件名

cat *.txt |wc

832288-20171118101251749-2074203276.jpg

用来统计当前目录下的文件数

ls -l | wc -l

832288-20171118101606109-1812118488.jpg
说明:数量包含当前目录


步骤

①对服务器和客户端的代码分别进行编译:

gcc -o server seerver.c

gcc -o client client.c

②(一个终端中)运行服务器 (注意端口号)

sudo ./server 155229

③(另一个终端)运行客户端,根据提示接收文件

./client

④查看文件是否传送成功

832288-20171118104819874-560456056.jpg

实验三-并发程序-2

  • 使用多线程实现wc服务器并使用同步互斥机制保证计数正确
  • 对比单线程版本的性能,并分析原因

多线程

每个线程独立地完成相关的功能,任何一个线程执行成功与否对另外两个线程都没有影响

832288-20171118112839062-1822450825.jpg

多线程的优点:

  • 第一,将原来在一个大流程中实现的功能放到了多个小流程中,程序更加的简洁和易于阅读。
  • 第二,将不同的功能放到不同的线程中,提高了程序的执行效率。
  • 第三,“多线程”使得程序的模块化更强,有利于追踪程序执行过程和排查问题。

832288-20171118114335452-325764812.jpg

pthread并非Linux系统的默认库,而要在Linux中将其作为一个库来使用,就需要加上“-lpthread”或“-pthread”以显式链接该库。

通过 pthread_create()函数创建新线程。

#include 
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void *), void *restrict arg);

pthread_join等待一个进程

832288-20171118113904390-1639253599.jpg

实验三-并发程序-3(未完成)

  • 交叉编译多线程版本服务器并部署到实验箱中
  • PC机作客户端测试wc服务器

实验中的问题及解决过程

学到的知识

通过本次实验,对单线程和多线程有了进一步的了解和学习,对pthread也有了进一步的使用。通过编程也更深入学习了服务器与客户端。使用man命令查询命令也很顺手。

转载于:https://www.cnblogs.com/fyhtvxq/p/7856361.html

你可能感兴趣的文章
android样式跟主题
查看>>
Charles打开无法访问网络
查看>>
2018.08.13
查看>>
WebSphere--基本特性
查看>>
PHP Jquery
查看>>
商品加入购物车表结构设计
查看>>
hibernate hibernate.cfg.xml
查看>>
Windows下Python3.6安装第三方模块
查看>>
v9定时发布的简单实现方法[支持静态生成]
查看>>
span中内容随着数字长度的添加而增大
查看>>
Collection接口框架图
查看>>
Basic Concepts of Block Media Recovery
查看>>
字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人...
查看>>
linux中安装JDK linux中安装Tomcat linux中安装Mysql 及故障解析 linux系统安装redis
查看>>
LeetCode-最后一个单词的长度
查看>>
iOS UI 07 uitableview
查看>>
快速排序
查看>>
const与#define、结构体对齐、函数重载name mangling、new/delete 等
查看>>
BZOJ2054 疯狂的馒头
查看>>
关于echarts的那些事(地图标点,折线图,饼图)
查看>>