原创 TCP--client

上章說完服務器,再來說一下客戶端吧; 客戶端的任務就輕鬆多了,由於客戶端不需要固定的端口號,因此不必調⽤bind(),客戶端的端口號由內核⾃動分配。客戶端不是不允許調⽤bind(),只是沒有必要調⽤bind()固定⼀個端⼜號,服

原创 Linux下的進程控制塊(PCB)task_struct

或許你對於task_struct是感到陌生的,那麼你就先要知道task_struct是進程控制塊(PCB)在linux下的一個具體的實現就好,如果你不知道什麼是進程控制塊的話,那就先看進程,然後再一步一步來; 什麼是進程?

原创 linux下孤兒進程和殭屍進程

我們知道在linux中,正常情況下,子進程是通過父進程創建的,子進程在創建新的進程。子進程的結束和父進程的運行是一個異步過程,即父進程永遠無法預測子進程 到底什麼時候結束。 當一個 進程完成它的工作終止之後,它的父進程需要調用wa

原创 c語言中編譯鏈接的整個過程

C語言的編譯鏈接過程要把我們編寫的一個c程序(源代碼)轉換成可以在硬件上運行的程序(可執行代碼),需要進行編譯和鏈接。編譯就是把文本形式源代碼翻譯爲機器語言形式的目標文件的過程。鏈接是把目標文件、操作系統的啓動代碼和用到的庫文件進行組織

原创 Linux中find指令的常用選項及示例

Linux下find命令在目錄結構中搜索⽂件,並執⾏指定的操作。 Linux下find命令提供了相當多的查找條件,功能很強⼤。由於 find具有強⼤的功能,所以它的選項也很多,其中⼤部分選項都值 得我們花時間來了解⼀下。即使

原创 TCP--server升級版

前面已經編寫完基本的TCP服務器和客戶端了;現在要對服務器做一個改進版本的,前面的服務器,其實只支持一個訪問,因爲當我們監聽到一個程序的時候,本進程只能服務其一個socket; 現在來寫一個支持多用戶訪問的,其中有好幾個方法,可

原创 TCP--三次握手四次揮手

假設現在有主機A運行的是TCP客戶程序,主機B運行的是TCP服務器程序,最初兩臺機器都是關閉狀態,現在主機A主動打開,而主機B被動打開,如圖: 這裏就不詳細講述其具體過程,只研究其爲什麼是三次握手; 假設是兩次握手的話,那麼

原创 兩個棧實現一個隊列

使用兩個棧實現一個隊列,這樣對於stl中棧和隊列的使用算是一個小考察; 因爲棧的特性是後入先出,而隊列的特性是先入先出,所以就是最先入棧的數據要第一個出來,假設我們push的數據都放到了stack1中,所以我們pop的時候我們需要

原创 linux--man 1/2/3查找的區別

man 1 命令 man 2 xxx用於系統調用 man 3 xxx 用於庫函數 如果某個庫函數沒有同名的命令和系統調用,那才能直接用man xxx

原创 兩個隊列實現一個棧

使用兩個隊列來模擬實現一個棧的功能 因爲隊列的特性是先入先出,棧的特性是後入先出,所以相當於是把一開始入到隊列裏面的數據先出出去,直到剩下最後一個數據,也就是本來棧中應該彈出的最後一個進入的數據,所以兩個隊列,就來回倒,就好了,每

原创 c++模板類順序表Vector

模板類順序表 這次在順序表之後,又再次學習了模板,於是便想着將模板類的順序表實現出來,因爲前段時間時間電腦出了些問題,很是悲傷,所以前面的就不補了,反正只要能看懂模板類的,再懂模板中的推理和實例化,這樣應該都不是問題。 下面就上代碼:#

原创 huffman文件壓縮及其解壓(附源碼,針對各種文件)

huffman壓縮簡介 構建壓縮信息 開始壓縮 統計字符 建立huffman樹 得到huffman編碼 將huffman編碼壓縮 書寫配置信息 解壓縮 讀取配置信息 重新建樹 還原文件 整體源碼 test.cpp com

原创 TCP定時器

TCP中一共有四種定時器: 重傳計時器:Retransmission Timer 堅持計時器:Persistent Timer 保活計時器:Keeplive Timer 時間等待計時器:Time_Wait Timer。

原创 TCP--server

一個在linux下的基於tcp的服務器和客戶端; 具體的網絡基礎參照謝希仁老師的《計算機網絡》來入門; 在TCP/IP協議中,“IP地址+TCP或UDP端⼜號”唯⼀標識⽹ 絡通訊中的⼀個進程,“IP地址+端⼜號”就稱爲socke

原创 linux進程間通信--管道

作爲進程間通信的第一篇,那麼先來講述一下什麼是進程間通信吧; 因爲每個進程各⾃有不同的⽤戶地址空間,任何⼀個進程的全局變量在另⼀個進程中都看不到所以進 程之間要交換數據必須通過內核,在內核中開闢⼀塊緩衝區,進程1把數據從⽤戶空間