原创 Linux下TCP非阻塞連接的方法

一、背景 TCP連接函數用於連接服務器端口,若服務器地址不存在時,並不能在短時間內返回連接結果; 二、相關知識 1、連接超時機制 在非阻塞的socket下,調用connect連接函數會一直阻塞到連接建立或者連接失敗,連接建立的時候那時間比

原创 Linux下使用readline庫編程實現多級CLI菜單

一、背景 CLI是一種快速簡潔的人機交互方式,優秀的CLI(如 mysql、vtysh、gdb)帶給我們非常好的體驗。那麼CLI都是如何開發出來的? 二、相關知識 2.1 CLI vs GUI 文章[1] 縱觀CLI與GUI的發展進行比

原创 Linux下對libevent的evbuffer模塊裁剪移植

目錄列表1. 背景2. 源碼分析2.1 結構體分析2.2 主要接口3.裁剪3.1 兼容性定義3.2 裁剪實現3.1 chain相關操作3.2 evbuffer的操作3.3 運行測試4. 結論 1. 背景 libevent作爲一款高

原创 c語言數據結構應用-數組隊列(無鎖隊列)在多線程中的使用

一、背景 上篇文章《c語言數據結構實現-數組隊列/環形隊列》講述了數組隊列的原理與實現,本文編寫一個雙線程進行速度測試 二、相關知識 多線程編程接口: 1) 創建線程 pthread_create 函數 SYNOPSIS

原创 c語言命令行-勇者鬥惡龍

一、背景 馬上過春節了,在家閒暇時間,看到了別人php寫的一個命令行遊戲,直接拿過來用c語音實現了一下哈。 二、相關知識 1、CLI顏色打印方法,使用printf控制就行,以下從網上收錄了一些常用的顏色碼: 打印格式爲: printf("

原创 Linux下使用ZMQ實踐“發佈-訂閱”模型

一、背景    繼續ZMQ系列,本期我們看一下“單生產者-多消費者”的編程場景,使用ZMQ_PUB/ZMQ_SUB實踐“發佈-訂閱”模型二、相關知識2.1 ZMQ_PUBZMQ_PUB A socket of type ZMQ_P

原创 Linux下使用zlib實現數據壓縮解壓

1、背景 本文舉例說明了:項目過程中字符串數據傳輸的場景下(文件名列表),如何使用數據壓縮減少帶寬的開銷; 2、相關知識 引用外部的一個手冊進行說明 zlib庫剖析(1):實現概覽 zlib庫剖析(2):編譯及應用 zlib庫剖析(3

原创 Linux下使用ZMQ實踐“生產者-消費者”模型

一、背景    上一篇文章《Linux下使用ZMQ實踐“請求-響應”模型》引入了ZMQ的實踐案例,本章繼續實踐編程模型中常用的“生產者-消費者”模型。二、相關知識    ZMQ_PUSH、ZMQ_PULL模型是單發單收的模型,你只能在ZM

原创 Linux下使用Quagga搭建軟路由-OSPFv2學習

一、背景 在學習路由協議如OSPF協議時,需要進行一個實操的練習,若手裏又沒有核心交換機,怎麼破? 本文講述瞭如何在Linux系統上搭建軟路由環境,並使用OSPF路由協議完成路由表的學習。 二、相關知識 2.1 Quagga Quagga

原创 c語言數據結構實現-哈希表/哈希桶(hashtable/hashbucket)

一、需求 以“key-value”的形式進行插入、查詢、刪除,是否可以考慮犧牲空間換時間的做法? 二、相關知識 哈希表(Hashtable)又稱爲“散列表”,Hashtable是會根據索引鍵的哈希程序代碼組織成的索引鍵(Key)和值(Va

原创 c語言數據結構實現-數組隊列/環形隊列

一、背景需求 應用場景是一個生產者一個消費者,兩者平均處理速度是相當的,但是有生產峯值速度太快,消費者處理速度跟不上的情況; 這種場景若用單線程處理,則會出現消費速度慢導致拖慢生產者的速度; 若使用雙線程處理,一個生產線程一個消費線程,這

原创 c語言數據結構實現-鏈式隊列

一、背景需求 在上一篇文章中介紹了數組實現的隊列,本章節再補充一個鏈式的隊列,實現動態插入空間的操作。 二、相關知識 鏈式隊列由環形鏈表實現,通過鏈表頭和鏈表尾的操作,完成了隊列入列出列的功能。 如圖所示,空隊列時至少需要一個空節點,表示

原创 c語言數組洗牌的實現

1.前言         測試數據中,需要用到隨機數據,同時要求數據不能重複。所以最終想到了洗牌的方式來生成測試數據,也就是大名鼎鼎的shuffle算法。 2.相關知識 2.1 算法描述 考慮了不需要額外地申請空間,所以需要再數組

原创 Linux下使用eventfd實現進程間信號量操作

1 前言 起源來自於單線程epoll_wait內部處理queue的思考,後來發現了linux支持一種自定義事件的fd,查找資料之餘又發現了eventfd還有多進程信號燈的用處。。。本文翻譯了eventfd的用法,並在文末附帶dem

原创 Linux下使用ZMQ實踐之與libevent結合

1. 前言         最近考慮到一個問題,項目中有同時處理socket、zeromq的邏輯需求,想通過libevent(I/O服用)一塊將zmq-socket的事件也放一個線程中處理。         網上了解了一些實現,大