原创 Real user ID, Effective userID , Set user ID 之間的關係

前段時間一直沒搞明白這幾個ID之間的關係,今天看到一篇博文,這才撥雲見日,纔有所瞭解了.real user ID:實際用戶ID,指的是進程執行者是誰effective user ID:有效用戶ID,指進程執行時對文件的訪問權限saved

原创 linux命令實現:whoami

#whoami -->root 要實現的就是這個命令,很簡單,稍微分析一下: 1.通過系統調用getuid取得執行該程序的UID 2.檢索/etc/passwd文件,通過UID尋找到對應的USER_NAME.(/etc/passwd格式

原创 linux命令實現:ls

ls命令使用詳解 ls 命令可以說是linux下最常用的命令之一。 -a 列出目錄下的所有文件,包括以 . 開頭的隱含文件。 -b 把文件名中不可輸出的字符用反斜槓加字符編號(就象在C語言裏一樣)的形式列出。 -c 輸出文件的 i

原创 linux命令實現:cp

cp用於複製文件之類的操作 用法:cp [參數] file newfile (把file複製到newfile)   或:cp [參數] file1 file2 file3 ... dirname(把文件file1 file2 file .

原创 堆之二叉堆&堆排序

二叉堆是特殊的完全二叉樹。 定義,符合一下兩點即爲二叉堆: 1.是個堆 2.是個完全二叉樹 因爲是完全二叉樹,所以一般用數組存儲。 在數組中,f是父節點下標,l是左節點下標,r是右節點下標,son是子節點下標(l或者r)。 因爲是完全二叉

原创 KMP算法

  求一個字符串T的子串S的位置一般算法是int len=T.len-S.len,j,i; for(i=0;i<len;i++) { for(j=0;j<S.len;j++) if(T[i+j]!=S[j])

原创 牛頓迭代法

牛頓迭代法(英文名Newton’s Iteration)是用來求函數的根的高效算法。 遞推公式爲                     圖1 大概思想:             如圖所示,取一個點(xn,f(xn)),過該

原创 gcc編輯錯誤提示

1.incompatible implicit declaration of built-in function   2.dereferencing pointer to incomplete type   3.conflict

原创 c語言位域

有些信息在存儲時,並不需要佔用一個完整的字節, 而只需佔幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態,用一位二進位即可。爲了節省存儲空間,並使處理簡便,C語言又提供了一種數據結構,稱爲“位域”或“位段”。所謂“位域”是

原创 樹狀數組 插點問線 插線問點

mark http://dongxicheng.org/structure/binary_indexed_tree/ http://blog.csdn.net/greyant/article/details/7548564 點

原创 linux下的文件操作

這一章給出了諸多的文件操作的函數,我把這些函數總結一下 open() creat() close() read() write() lseek() fstat() stat() mmap()   nummap() fcntl()  ioc

原创 MD5的實現

閒着沒事幹,索性實現一下MD5 具體的東西,說白了,就是把原始數據+補充數據共分割成N個64位的小段,每個小段又分成16個小節,然後每個小段參與一次四輪運算,用ABCD這四個數關聯起他們,保證數據有絲毫變動,得到的MD5碼,會完全變動

原创 linux獲取終端大小

在shell下可以直接用$LINES和$COLUMNS兩個變量,$LINES是屏幕高,$COLUMNS是屏幕寬,單位都是字符數。 在程序中獲取: 1.可以通過讀取$LINES與$COLUMNS對應的文件之類的,這裏不做贅述。 2.可以通

原创 快速排序簡述

快排是不穩定的排序。 複雜度介於nlogn ~n*n 之間(均攤nlogn)。 當每次取值恰好能取到中位數時,複雜度最小,即爲n*logn。 當每次取值取到極值時,當待排序數據的重複性很高時,時間複雜度最大,即爲n*n 對於無序數據,快排

原创 虛擬內存簡述

在遠古時期,內存極小,程序也不大,程序直接裝載到內存運行。但是隨着程序越來越複雜,理所應當的出現了這個問題, 如果程序所需內存比可用內存大,程序該如何運行? 爲了解決這個問題,當時提出了一種覆蓋裝入的技術,就是需要程序員自己把程序分割成若