原创 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、