原创 《程序員的自我修養》-編譯和鏈接

一個.c文件最終成爲a.out文件需要經歷預處理,編譯,彙編,鏈接這4個過程。 gcc總過程如下 預編譯 解釋 主要處理源代碼文件裏以#開始的預編譯指令。eg.#include,#define 內容 1.展

原创 《程序員的自我修養》--目標文件有什麼和ELF文件格式簡述

A.目標文件的格式 目標文件定義 源碼經過編譯之後但是沒有經過鏈接的中間文件。 理解: 目標文件和可執行文件的結構相似,所以和可執行文件採用一種格式存儲。可執行文件的格式,主要有PE(Portable Executable )和E

原创 Reactor和Proactor的區別

1.先解釋同步和異步: 同步異步是一種通信機制。 同步:調用方需要保持等待直到I/O操作完成。 異步:調用方可以不用保持等待,只需要操作系統完成I/O操作通知調用方就可以了。 2.再說說阻塞和非阻塞: 阻塞非阻塞是一種調用機制。 阻塞:調

原创 webbench1-5源碼分析

socket.c文件 所有我自己的註釋理解都是漢字,絕大部分前面都有zzy,是爲了和原來作者的註釋區分開 /* $Id: socket.c 1.1 1995/01/01 07:11:14 cthuang Exp $ * * This

原创 C++智能指針 shared_ptr,unique_ptr和weak_ptr

1.智能指針爲什麼存在? 因爲C++沒有自動回收內存的機制,因此每一次new出來的動態內存必須手動delete回去。因此智能指針可以解決這個問題。 2.智能指針的大致描述是什麼? 智能指針:自動負責釋放所指向的對象,實際上它利用了棧的機制

原创 c++11庫 <thread>的基本使用

創建線程: /************************************************************************* > File Name: 1.cpp > Author: 朱

原创 同步異步阻塞非阻塞

今天在某乎看到的有關同步異步阻塞非阻塞的例子,很形象。 老張燒水。名詞:老張,會響的水壺,不會響的水壺。 同步阻塞:老張用不會響的水壺燒水,得在旁邊看者,什麼也幹不了。水沸騰倒暖壺以後才能走。 同步非阻塞:老張時不時去看看水有沒有開,

原创 基本TCP套接字編程總結

1.分配一個套接口的描述字及其所用的資源 int socket(int family,int type, int protocol); //family指定協議族 //type指定套接字類型 //protocol指定爲某個協議常數值12

原创 燙燙燙和屯屯屯

int p[16]; 原來寫代碼會出現死循環的燙燙燙,因爲debug把所有分配出來的棧空間的每一個字節都初始化成0xCC。多個0xCC 的漢字編碼就是n個“燙”。 如果打印一個指針的值發現是0xCCCCCCCC,那麼基本可以確定這個指針沒

原创 半同步/半異步模式和領導者/追隨者模式

這兩種都是高效的併發模式。 半同步半異步模式: 出現原因: 異步線程執行效率高,但是編寫複雜,同步線程效率低,但是邏輯簡單。服務器要求好的實時性和同時處理多用戶的請求,英雌採用兩者結合的形式。 具體情況: 過程: 異步線程見聽到客

原创 有關谷歌瀏覽器的一個問題

先看我的測試結果: 最最low的服務器: 功能:監聽新用戶    監聽註冊描述符的EPOLLIN和EPOLLOUT。    觸發EPOLLIN的話,打印緩衝區    觸發EPOLLOUT,發送固定字符串 代碼: /******

原创 用select處理帶外數據

回顧select: 下面的事件支持selece可讀: 1.socket內核接收緩存區中的字節數大於或等於其低水位標記SO_RCVLOWAT(0x1004)。我們可以無阻塞地讀取該socket,並且讀操作返回字節數爲0。 2.socke

原创 關聯容器 map/set/multimap/multiset

關聯容器分有序和無序。 有序容器的名稱們 簡介 map 關聯數組,保存鍵-值對 set 關鍵字就是它的值,只保存關鍵字 multimap 關鍵字可以重複出現的map multiset 關鍵字可以重複出現的set

原创 getopt和getopt_long

getopt和getopt_long函數 1.介紹getopt int getopt(int argc, char * const argv[], const char *optstring); getopt

原创 axel:多線程下載工具

定位: 基於http,ftp協議的多線程下載工具,支持斷點續傳。 axel github代碼:axel ubuntu16.04下載: apt-get install axel 使用方法: 1.man axel 2.axel -h