原创 C++ 分割字符串函數 split

在 C++ STL 中,沒有線程的分割字符串的函數,但是該函數的又是很常用的。所以,本文介紹幾種字符串分割方法。使用 C 中的strtok函數C 中的strtok函數可以對 C 風格的字符串進行分割,strtok_r是strtok的線程安全

原创 我“寫”了一個低效的STL子集

tinySTL本人蔘考《STL源碼剖析》“寫”了一個低效的STL 子集。代碼中有比較詳細的註釋,可作爲閱讀《STL源碼剖析》的輔助材料。本項目爲本人的練習項目,所以暫時未提供測試,不能保證完全正確。請多多包涵。至於怎麼“低效”了,我後面會整

原创 使用 C++ 封裝互斥量、條件變量

本文使用 C++RAII 機制來封裝互斥量、條件變量,使其自動管理互斥量、條件變量的生命週期,避免手動維護帶來的資源泄露等各種問題。本文使用的是 Linux 下 Pthread 庫。互斥量MutexLock首先封裝 mutex,下面爲實現:

原创 基於 C++ 11 實現的 Web 服務器

本人蔘照《Linux多線程服務端編程》,以及模仿該書使用的muduo,寫了一個輕量的 Web 服務器。源碼Github。代碼中有比較詳細的註釋,可作爲看《Linux多線程服務端編程》得輔助材料。已完成完成基本的Tcp(被動連接)庫;簡易的H

原创 std::move()源碼分析

C++11 引入右值和移動語義,其中std::move()是不可或缺的。現在我們纔看看std::move()是這麼實現的。remove_reference在分析std::move()之前,先看看remove_reference,下面是rem

原创 C++ noncopyable類

在muduo中,有一個noncopyable類,繼承了該類的派生類不能被拷貝,只能被移動。涉及拷貝的函數有兩個:拷貝構造函數和拷貝複製操作符。將這兩個方法聲明爲不可訪問或者刪除(=delete),即可達到不可拷貝的效果。將函數聲明爲priv

原创 C++回聲服務器_8-epoll版本服務器

這次使用epoll函數實現服務器,而客戶端直接使用完美回聲服務器的客戶端。服務器代碼#include <cstdio> #include <cstdlib> #include <cstring> #include <unistd.h> #i

原创 C++回聲服務器_9-epoll邊緣觸發模式版本服務器

epoll默認情況下是水平觸發模式,這次將epoll設置爲邊緣觸發模式來實現服務器,而客戶端直接使用完美回聲服務器的客戶端。服務器代碼#include <cstdio> #include <cstdlib> #include <cstrin

原创 C++回聲服務器_7-select版本服務器

這次使用select函數實現服務器,而客戶端直接使用C++回聲服務器_2-修復客戶端問題的客戶端。服務器代碼#include <cstdio> #include <cstdlib> #include <cstring> #include <

原创 C++回聲服務器_6-多進程pipe版本

在服務器多進程版本的基礎上,使用管道來向一個子進程發送接收到的數據,該子進程將接收到的數據保存到文件中。客戶端代碼不變。服務器代碼#include <cstdio> #include <cstdlib> #include <cstring>

原创 C++回聲服務器_5-多進程版本

服務器和客戶端都是用多進程來接收和發送數據。服務器代碼#include <cstdio> #include <cstdlib> #include <cstring> #include <unistd.h> #include <csignal

原创 C++回聲服務器_4-UDP connect版本

針對UDP套接字調用connect函數不會與對方UDP套接字建立連接,只是向UDP套接字註冊目標IP和端口信息。修改客戶端代碼服務器代碼不需要修改,只需修改客戶端代碼。調用connect函數之後,可以調用write函數和read函數來發送、

原创 C++回聲服務器_3-UDP版本

這次我們實現一個UDP版本的回聲服務器。用於傳輸數據的函數UDP套接字不會像TCP套接字那樣保持連接狀態,因此每次傳輸數據都要添加目標地址信息。用於傳輸數據的函數:發送數據到目標服務器。#include <sys/socket.h> ss

原创 C++回聲服務器_2-修復客戶端問題

C++回聲服務器_1-簡單版本中的問題出在客戶端。客戶端通過write函數一次性發送數據,過一段時間再調用一次read函數,期望接收傳輸的數據。問題在於這段時間到底是多久?理想的客戶端應在接收到數據時立即讀取數據。改進客戶端發送數據時,可以

原创 [C++回聲服務器_1]簡單版本

C++網絡編程離不開socket編程。我們現在使用socket編寫簡單的回聲服務器。流程這裏所說的流程包括兩部分:socket函數調用流程。服務器與客戶端交互流程。socket函數調用流程服務器與客戶端交互流程回聲服務器主要功能:服務器將接