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.客戶端創建對應的子線程用于接受服務器端發送的數據包,根據數據包類型不同選擇不同的功能輸出服務器端的處理結果??蛻舳耸侵鲃影l送信息的,所以客戶端根據功能選擇相應的選項。
踏過的坑:
1.客戶端沒有創建專門的子線程來讀,直接根據相應的功能發送和讀取信息,后面出現一系列的讀取錯誤。
2.把客戶端和服務器之間的關系搞混了,把服務器的代碼寫在客戶端或是客戶端的代碼寫在服務器里。
3.寫的時間太長,導致修改部分之后,其他的沒有修改完,出現亂碼,段錯誤。邏輯錯誤才是我期間遇到的最大的錯誤。
自我總結:
1.整個LSD的課程學習期間,自己沒有用心去學習,掌握不是很好,學習的強度很大,白天課上新知識點,晚上回去寫作業,第二天YY課堂講習題,貌似這樣計劃不錯,但實際上,有很多東西吸引我的注意力,比如得到的新開專欄,微信群里的一些發言或是老師講課枯燥無趣,或是上課老師敲代碼,自己卻懶得敲心想著晚上或者其他時間可以敲代碼,往往實際上代碼還在那里,很少有時間去再敲一篇,不懂時就看看老師的代碼案例,對照著把題目做完,僅僅就是做完,做對而已。沒有時間去想這些該怎么探索或者其他方案。
2.做項目開始的時候,看起來做的功能很少,所以看起來寫的會很快,這是我看到項目的想法。這就導致我對項目有一個沒有緊迫感的感受,即使項目答辯前,程序還有一堆bug,我也是不太緊張。
3.自己以為很簡單的東西,沒有做什么規劃分析,只知道埋頭按照自己的想法做,但是做出來的效果不是很好,也少于人討論自己的想法,導致在錯誤的路上走了很遠。有點太自以為是,自我膨脹,以為自己以前也做過類似的東西,做起來估計差不多,其實差很多。需要戒驕戒躁,學完一門課程,更要及時清零,不要讓以前的經驗阻礙自己,進入一門課程就當新的一門課程來學。接待一個項目要像一個新的項目來做。
4.做一個進度規劃和整體的項目思路很重要。這是自己積累和學習的方面。多寫代碼,這是快速提高自己編程能力的快速方法。
5.最好多與人討論,交流自己的想法,分享自己覺得不錯的點子。