原创 [APUE]第十一章 線程

第十一章 線程 線程也有線程ID用pthread_t 表示 每個系統對pthread_t 的定義不同。 int pthread_equal(pthread_t tid1, pthread_ttid2) 獲得線程的線程ID pthread_

原创 wget 參數解析篇

1 整體概括: 前提說明: 本篇wget分析僅僅是參數解析內容,不包括wget的遞歸和非遞歸下載,後面文章會陸續進行分析。本次主要分析參數爲tries(t) timeout(T) no-clobber quiet(q) recursive

原创 redis 鏈表

typedef struct listNode { struct listNode *prev; //先前節點 struct listNode *next; //後續節點 void *value;

原创 [APUE]第十二章 線程控制

線程屬性: 初始化: int pthread_attr_init(pthread_attr_t*attr); int pthread_attr_destory(pthread_attr_t*attr); 分離狀態屬性設置和獲取 int p

原创 wget 非遞歸下載

wget 非遞歸下載篇 1整體概括 上篇分析的是wget參數解析,本篇主要是分析wget非遞歸下載html或者文件。wget實際上就是通過sock 向web服務器發送http數據包(GET or POST),web服務器收到請求後,發回回

原创 redis aeMain 網絡 reactor

事件循環   1 首先listen port 註冊到epoll 中,並且設置回調acceptTcpHandler aeCreateFileEvent(server.el, server.ipfd[j], AE_READABLE, ac

原创 [APUE]第十章 信號

信號概念 不存在編號爲0的信號。 產生信號的方式: 1          當用戶按某些終端鍵時,引發終端產生信號。 2          硬件異常產生信號,比如SIGSEGV信號。 3          進程調用kill函數可將信號發送給

原创 [APUE]第九章 進程關係

第九章 進程關係 進程組 每個進程組都有一個組長進程。組長進程的標識是,其進程ID等於進程組ID 組長進程可以創建一個進程組,創建該組中的進程,然後終止。只要在某個進程組中有一個進程存在,則該進程組就存在,這與其組長進程是否終止無關。從進

原创 redis loadServerConfig

函數原型 void loadServerConfig(char *filename, char *options) redis可以通過指定配置文件和命令行方式修改redis 配置,其中filename就是配置文件,option 保存使用者

原创 redis initServer

initServer 主要是對程序進行初始化,包括client list 創建、共享常量字符串、調整文件句柄大小、網絡Reactor初始化、監聽套接字建立、數據庫db初始、時間事件初始化等等 創建共享對象: createSharedO

原创 redis initServerConfig

首先初始化默認配置 變量 默認值 server.runid d3d11e6a9a2ee8876697355a44117dfcfe87fce3 server.configfile NULL server.hz

原创 redis 主體框架

參考了《redis設計與實現第二版》,然後花了一週業餘時間 把代碼擼了一遍,留下自己的筆記 整體框架 initServerConfig 主要是設置redis服務默認配置 loadServerConfig 對命令行傳入的參數和配置文件參數

原创 redis 字典

redis的字典使用哈希表作爲底層實現,一個哈希表裏面可以有多個哈希表節點,而每個哈希表節點就保存了字典中的一個鍵值對 typedef struct dictht { dictEntry **table; //hash

原创 redis 字符串

字符串 typedef char *sds; struct sdshdr { unsigned int len; //記錄已經使用字節數 unsigned int free; //記錄未使用字節數 char buf[];

原创 redis 跳躍表

每次創建一個新跳躍表節點的時候,程序都根據冪次定律(power law, 越大的數出現的概率越小)隨機生成一個介於1和32之間的值作爲level數組大小,這個大小就是高度. 在同一跳躍表中,各個節點保存的成員對象必須是唯一的,但是多個節點