原创 c程序編譯全過程解析

前言   當我們編寫好c程序之後,經過編譯便可運行得出結果。但是,我們所編寫的程序別人可以看懂,但是機器卻看不懂。爲了在系統上運行這個程序,該源程序需要被其他程序轉化爲一系列低級機器語言指令,然後將這些指令按照可執行目標程序的格式

原创 柔性數組(變長數組)

前言   我們平時在寫C程序時,我們經常會使用數組來存放一些字符串或者其他數據。但是,在使用數組之前,我們都必須指定數組的大小。當我們知道所要存放數據的大小時還好,但是當我們還無法預先知道存放數據的大小時,我們必須指定足夠大的空間

原创 線程控制原語小結

在本篇博客中主要總結一下linux下,線程的一些控制原語。   在Linux環境下,所有線程特點,失敗均直接返回錯誤號。所以我們可以利用strerror()將錯誤信號所代表的具體錯誤打印出來。參數爲發生錯誤所返回的錯誤信號。例如

原创 linux基礎之常用命令總結

命令格式 1、目錄切換   1、ls:查看當前目錄中的文件。 參數 作用 示例 -a 列出目錄下所有文件(包括隱藏文件) ls -a -l 列出目長數據串,包括文件屬性與權限數據等 ls -l或ll -i 列

原创 str系列源碼小結

1、strcmp   ①、原形:int strcmp(const char * str1, const char * str2)   ②、功能:比較兩個字符串的大小   ③、代碼 #include<stdio.h> #incl

原创 c語言中的各種“零”

  在c語言中,存在各種各樣的“零”。例如:0,‘0’,NULL等。下面我們就具體介紹一下這些”零“: 零的含義 零值 意義 備註 0 整型數據的0 0.0 實型數據的0 NULL 指針型數據的0 內存的0

原创 簡單剖析B樹(B-Tree)與B+樹

注意:首先需要說明的一點是:B-樹就是B樹,沒有所謂的B減樹 引言   我們都知道二叉查找樹的查找的時間複雜度是O(log N),其查找效率已經足夠高了,那爲什麼還有B樹和B+樹的出現呢?難道它兩的時間複雜度比二叉查找樹還小嗎?

原创 字符串分割函數--strtok與strsep

  在c/c++中,字符串分割函數主要有兩種:一是strtok函數,另一個就是strsep函數。下面我們對這兩個函數作一個詳細解釋說明。 1、strtok 原形:   char* strtok(char *str, const c

原创 一致性hash詳解

需求   我們都知道,任何一種算法的的出現都源於需求。人們需要用它來更好的解決問題。那麼,一致性hash算法的出現是源於什麼需求呢?例如:在使用n臺緩存服務器時,一種常用的負載均衡方式是,對資源o的請求使用hash(o)=o mo

原创 linux基礎之vim編輯器快捷鍵

  在linux下,vim編輯器無疑是個神器。在全命令行下編輯時,爲了提高效率,快捷鍵就變得必不可少。在本文中,主要介紹了vim的快捷鍵。 vim編輯器的三種狀態模式 啓動與退出 命令 釋意 $vim 直接進入編輯環

原创 C++中的“淺拷貝”與“深拷貝”

淺拷貝問題的提出   首先,我們先看一段代碼: #include<string.h> using namespace std; class test { private: char* p; int len; p

原创 mem系列函數源碼實現

1、memcmp   ①、原形:int memcmp(const void *buffer1, const void ,*buffer2, int count);   ②、功能:比較內存區中指定count個字符的大小;   ③

原创 剖析linux下的零拷貝技術(zero-copy)

背景   大多數的網絡服務器是基於server-client模式的。在這當中,下載是一個很常見的功能。此時服務器端需要將主機磁盤上的文件發送到客戶端上去。傳統的 Linux 操作系統的標準 I/O 接口是基於數據拷貝操作的,即 I

原创 線程與進程的簡單比較

  本篇文章主要對線程與進程之間的區別作一簡單總結,從內核實現的區別,雙方的地址空間、共享的數據、操作原語的比較和多線程與多進程的區別這幾方面,做一簡單說明。 1、Linux內核線程實現原理   Unix系統中,早期是沒有“線程

原创 linux基礎之目錄結構

  在linux下,一切皆文件。我們打開電腦後,會發現都是文件夾而不是在windows下的盤符(c盤,d盤等)。windows分區在盤符下面,而linux分區掛在文件目錄下面。在本文中,我們就來介紹以下linux的目錄結構。 1、