为了账号安全,请及时绑定邮箱和手机立即绑定

【学习打卡】第5天 构建基于TCP协议的文件传输系统——2

标签:
C++

一、课程信息

打卡时间:2022.8.7
课程名称:C/C++气象数据中心实战,手把手教你做工业级项目
章节名称:开发基于tcp协议的文件传输子系统 4-10
讲师: 长歌_吴从周

二、今日课程

课程内容:(1)继续搭建TCP客户端上传程序和服务器的框架 (2)学习了线程相关知识

三、学习心得

3.1 搭建TCP客户端上传程序和服务器的框架

今天补充了tcp客户端上传程序的主要业务函数:bool _tcpputfiles()。这个函数的主要流程包括:1.调用OpenDir()打开starg,clientpath目录 2. 遍历目录中的每个文件,调用ReadDir获取一个文件名 3.把文件名、修改时间,文件大小组成报文发送给对端 3.把文件的内容发送给对端(未完成) 4.接收对端的确认报文 5. 删除或者转存本地文件。函数写完后出了一些bug,还在调试中…

3.2 今天顺便补充了线程的相关知识

线程允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程,同一个程序中的所有 线程均会独立执行相同的程序,且共享同一份去安居内存区域,其中包括初始化数据段、未初始化数据以及堆内存端段。
进程是CPU分配资源的最小单位,线程是操作系统调度执行的最小单位。
线程是轻量级的进程,在Linux环境下现成的本质仍是进程.
查看指定进程的LWP(线程)号:PS -Lf pid

线程和进程的区别:
1)进程间的信息难以共享。由于除去只读代码段外,父子进程并未共享内存,因此必须采用一些进程间通信的方式,在进程间进行信息交换。
2)调用fork()来创建进程的代价相对较高,即便利用写时复制技术,仍然需要复制诸如内存页表和文件描述符之类的多种进程属性2,这意味着fork()调用在时间上的开销仍然不菲。
3)线程之间能够方便、快速地共享信息。只需将数据复制到共享(全局或堆)变量中即可。
4)创建线程比创建进程通常要快10倍甚至更多。线程之间是共享虚拟地址空间的,无需采用写时复制来复制内存,也无需复制页表。

◼ 共享资源
 进程 ID 和父进程 ID
 进程组 ID 和会话 ID
 用户 ID 和 用户组 ID
 文件描述符表
 信号处置
 文件系统的相关信息:文件权限掩码
(umask)、当前工作目录
 虚拟地址空间(除栈、.text)
◼ 非共享资源
 线程 ID
 信号掩码
 线程特有数据
 error 变量
 实时调度策略和优先级
 栈,本地变量和函数的调用链接信息

四、学习截图

图片描述图片描述

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消