原创 linux 下 動態庫.so和靜態庫文件.a的製作與使用

1、靜態庫 1.1 準備好自己寫好或下載的C文件和頭文件(就像單片機添加一個模塊的aston.c、aston.h),庫裏面沒有主函數,只有被調用的函數 1.2 在原材料C和H同級文件目錄下編寫makefile(編譯過程)       al

原创 網絡字節序之大小端(字節序與比特序)

      引言:最近在網上看了很多博客,想要深入瞭解大小端問題,主要是做畢設時,RTP包協議的結構體定義有兩種方式,即大端和小端。但是一些博客並沒有講到理解大小端的本質問題,在這裏按自己的理解擴充一下,可能有錯,望理解!!! 1. 字節

原创 應用層驅動與內核驅動

        寫這篇博客是因爲聽到一句話,應用層驅動?開始思考驅動就驅動不是在內核嗎,怎麼跑應用層去了。其實這個應用層驅動並不是我們常說的內核驅動,只是一個模塊實現功能的一個集合,被makefile按照規則生成了一個文件叫.SO動態鏈接

原创 makefile中困擾初學者很久的問題,找不到一篇將疑惑解釋清楚的文章(更新中)

  CC = g++ SRCS = $(wildcard *.cpp) OBJS = $(patsubst %cpp, %o, $(SRCS)) LFLAGS :=-lsqlite3 -lTR3A CFLAGS := -Wall

原创 指針法創建二叉樹代碼詳解以及遍歷、插入、刪除處理C語言版(更新中ing)

這樣還是要手動輸入二叉樹,然後scanf讀取,最好的做法是是否用一個指針隨意指向一個字符串,然後將這個串創建成二叉樹,等我完成在補充。 #include<stdlib.h> #include<stdio.h> #include<stri

原创 strcpy與strncpy函數的陷阱與缺陷(今天更新補充完)

 前言,最近看到一篇博客有如下一段代碼,該代碼執行時會出現錯誤,A博主的意思是因爲str的空間太小, p指向的串太大引起的 但是我在ubuntu下運行時,沒有錯誤,應該是編譯環境不同吧,然後又在一篇博客看到如下一段話,B博主部分內容如下

原创 二重指針傳參意義(函數體內malloc申請內存泄漏與變量引用的就近原則)

譚浩強C程序設計講到,如果想交換兩個變量a,b的值,我們會這麼做: func(int* a,int* b) { int temp; temp = *a; *a = *b; *b = *a; } func(

原创 ASCII與二進制在內存中的存儲區別(EOF的應用)

一、文本文件與二進制文件的定義     大家都知道計算機的存儲在物理上是二進制的,所以文本文件與二進制文件的區別並不是物理上的,而是邏輯上的。這兩者只是在編碼層次上有差異。簡單來說,文本文件是基於字符編碼的文件,常見的編碼有ASCII編碼

原创 KMP算法(很適合初學者看,本人就是看了這篇文章秒懂的)

  前言:最近複習數據結構看到了章節串,發現程傑老師的《大話數據結構》KMP部分看起來很吃力,開始找博客,發現很多博客沒有說到本質問題,本人看了該博客後恍然大悟,有時候學習方法和查找資料的能力也很重要,找到合適的文章分分鐘就能弄懂,否則一

原创 樹和二叉樹

1 樹的概念 樹的結點:包含一個數據元素及若干指向其子樹的分支。 結點的度:結點擁有的子樹數目。(一個分支就是一個樹,二叉樹結點的度最多爲2,最少爲0) 葉子:度爲0的結點稱爲葉子。 樹的度:整個樹內出現的最大結點的度就是樹的度。 孩子:

原创 malloc的線程安全與signal使用malloc的陷阱(內核態與用戶態、系統調用與C庫調用、可重入與不可重入)

前言:爲什麼寫這篇博客? 原因:爲什麼malloc本身是線程安全函數(man手冊也說明了),但是signal中使用卻會產生錯誤與陷阱,線程是調用malloc並執行,signal也是執行malloc,可是爲什麼是不安全的? 背景知識:這4個

原创 select輪詢鍵盤鼠標文件IO(解釋在代碼中)

#include <sys/types.h> #include <sys/time.h> #include <sys/stat.h> #include <sys/select.h> #include <fcntl.h> #include

原创 函數的可重入與不可重入(輸入型參數與輸出型參數)

如下3個函數中,localtime爲不可重入,localtime_r可重入,加const爲輸入型參數,不加const爲輸出型參數。 1、struct tm *localtime(const time_t *timep); 2、struct

原创 ARM啓動過程之Uboot(以S5PV210爲例)

1,S5PV210的啓動過程 (1)iROM:iROM(價格最貴)在0地址處,與CPU總線式連接,上電就會執行,和norflash類似。210啓動時會首先執行內部的固件代碼,三星公司出廠前內置的代碼段,稱爲BL0。BL0部分包括對SD卡、

原创 爲什麼需要設置棧

棧的作用 計算機裏面的棧其實有着舉足輕重的作用。大學剛學c語言的時候,教的是堆棧,傳達的是一種後入先出的算法思想。但其實我們知道,堆和棧是兩個截然不同的東西。而這裏面說到的棧,則是更融入到計算機系統裏面,CPU結構的一部分。 一個函數設