LSD(linux system desine)中文名称是Linux程序设计
LSD的功能或者说作用就是用C语言编写一个Linux下的软件程序,能实现不同的客户端与服务器之间的通讯和简单功能的处理。
主要课程内容:
文件操作
1.io读写
2.查看修改文件权限
3.软硬链接
4.查看文件属性
5.缓存
6.重定向
进程与信号
1.子进程
a.孤儿进程
b.僵尸进程
2.启动新进程
3.信号
POSIX线程
1. 创建、属性、回收
2.同步
3.异步
4.多线程
进程间通讯:管道,信号量,信号,共享内存、消息队列、套接字
LSD项目,要求是要编写一个《远程终端管理系统》,要求实现以下功能:
1.不同的终端与服务器进行通讯(套接字socket)
2.注册与登录
3.能实现心跳功能和查看服务器端shell命令输出结果
4.能查看在线用户
5.能使不同的用户之间能聊天
6.广播聊天(群聊)
项目思路:
1.先将服务器和客户端的进行网络连接
2.创建用户信息链表和数据包结构
3.服务器读取客户端发送的信息,根据数据包类型的不同,switch (type)选择相应的功能,处理后发送数据包到客户端
4.客户端创建对应的子线程用于接受服务器端发送的数据包,根据数据包类型不同选择不同的功能输出服务器端的处理结果。客户端是主动发送信息的,所以客户端根据功能选择相应的选项。
踏过的坑:
1.客户端没有创建专门的子线程来读,直接根据相应的功能发送和读取信息,后面出现一系列的读取错误。
2.把客户端和服务器之间的关系搞混了,把服务器的代码写在客户端或是客户端的代码写在服务器里。
3.写的时间太长,导致修改部分之后,其他的没有修改完,出现乱码,段错误。逻辑错误才是我期间遇到的最大的错误。
自我总结:
1.整个LSD的课程学习期间,自己没有用心去学习,掌握不是很好,学习的强度很大,白天课上新知识点,晚上回去写作业,第二天YY课堂讲习题,貌似这样计划不错,但实际上,有很多东西吸引我的注意力,比如得到的新开专栏,微信群里的一些发言或是老师讲课枯燥无趣,或是上课老师敲代码,自己却懒得敲心想着晚上或者其他时间可以敲代码,往往实际上代码还在那里,很少有时间去再敲一篇,不懂时就看看老师的代码案例,对照着把题目做完,仅仅就是做完,做对而已。没有时间去想这些该怎么探索或者其他方案。
2.做项目开始的时候,看起来做的功能很少,所以看起来写的会很快,这是我看到项目的想法。这就导致我对项目有一个没有紧迫感的感受,即使项目答辩前,程序还有一堆bug,我也是不太紧张。
3.自己以为很简单的东西,没有做什么规划分析,只知道埋头按照自己的想法做,但是做出来的效果不是很好,也少于人讨论自己的想法,导致在错误的路上走了很远。有点太自以为是,自我膨胀,以为自己以前也做过类似的东西,做起来估计差不多,其实差很多。需要戒骄戒躁,学完一门课程,更要及时清零,不要让以前的经验阻碍自己,进入一门课程就当新的一门课程来学。接待一个项目要像一个新的项目来做。
4.做一个进度规划和整体的项目思路很重要。这是自己积累和学习的方面。多写代码,这是快速提高自己编程能力的快速方法。
5.最好多与人讨论,交流自己的想法,分享自己觉得不错的点子。