本週的學習任務是將前面幾章的內容作以複習,而且來總結一下以前每次考試的錯誤。
-期中複習考試資料html
經常使用來搜索,結合管道使用。例句以下:linux
man -k k1 | grep k2 | grep 2git
搜索同時含有k1和k2,且屬於系統調用。數據庫
最後的數字意味着幫助手冊中的區段,man手冊共有8個區段,最經常使用的是123,含義以下:vim
1.Linux
2.系統調用
3.c語言安全
可是當單獨用man語句的時候,想查看其中的單獨某個區段內的解釋時,用法是這樣的:編輯器
man 3 printf
即查找c語言中printf的用法。ide
這條語句能夠用來查找關鍵字,全文搜索,而且能夠直接查找文件內的內容。其中:函數
n:爲顯示行號
r:爲遞歸查找
例如,若是想查找某個宏,咱們已知宏保存在include文件夾中,因此可使用下列語句:工具
grep -nr XXX /usr/include(XXX爲所要找的宏)
cheat是很是好用的「打小抄」搜索工具,可以方便的告訴你你想要的內容。
將文本文件內容加以排序。可針對文本文件的內容,以行爲單位來排序。
參數:
m:將幾個排序好的文件進行合併。
n:依照數值的大小排序
Linux Bash中,ls . | sort 命令的功能是(顯示當前目錄內容並排序)
vim是一種很是好用的編輯器,總共有六種基本模式,最經常使用的是普通模式、插入模式和命令行模式。須要熟悉這三種模式之間的切換方式:
普通→插入: i 或 a 插入→普通: Esc 或 Ctrl + [ 普通→命令行: : 命令行→普通:Esc 或 Ctrl + [
經常使用的進入、保存和退出指令:
進入:vim 文件名 保存:命令行模式 :w 退出:命令行模式 :q
經常使用動做:
刪除:dd刪除整行 複製:yy複製整行 粘貼:p
經常使用選項
-c 只編譯不連接,生成目標文件.o -S 只編譯不彙編,生成彙編代碼 -E 只進行預編譯,不作其餘處理 -g 在可執行程序中包含標準調試信息 -o file 將file文件指定爲輸出文件 -v 打印出編譯器內部編譯各過程的命令行信息和編譯器的版本 -I dir 在頭文件的搜索路徑列表中添加dir目錄
編譯過程
預處理:gcc –E hello.c –o hello.i; gcc –E調用cpp 生成中間文件 編 譯:gcc –S hello.i –o hello.s; gcc –S調用ccl 翻譯成彙編文件 匯 編:gcc –c hello.s –o hello.o; gcc -c 調用as 翻譯成可重定位目標文件 鏈 接:gcc hello.o –o hello ; gcc -o 調用ld** 建立可執行目標文件
-o後面是接的你給生成的文件指定的名字,若是不指定,則默認爲a.out
在命令行上運行這個可執行目標文件須要輸入它的名字:
./a.out
其中./表明當前目錄。
注意:使用GCC編譯時要加「-g」參數,而後纔可以用gdb調試
GDB最基本的命令有:
gdb programm(啓動GDB) l 查看所載入的文件 b 設斷點 info b 查看斷點狀況 run 開始運行程序 bt 打印函數調用堆棧 p 查看變量值 c 從當前斷點繼續運行到下一個斷點 n 單步運行(不進入) s 單步運行(進入) quit 退出GDB
四種斷點:
1.行斷點 b [行數或函數名] <條件表達式> 2.函數斷點 b [函數名] <條件表達式> 3.條件斷點 b [行數或函數名] <if表達式> 4.臨時斷點 tbreak [行數或函數名] <條件表達式>
locate命令實際上是find -name的另外一種寫法,可是要比後者快得多,緣由在於它不搜索具體目錄,而是搜索一個數據庫(/var/lib/locatedb),這個數據庫中含有本地全部文件信息。Linux系統自動建立這個數據庫,而且天天自動更新一次,因此使用locate命令查不到最新變更過的文件。爲了不這種狀況,能夠在使用locate以前,先使用updatedb命令,手動更新數據庫。
命令格式:locate [選擇參數] [樣式]
命令參數:
-e:將排除在尋找的範圍以外
-1:若是是1則啓動安全模式,在安全模式下,使用者不會看到權限沒法看到的檔案。這會使速度減慢,由於 locate必須至實際的檔案系統中取得檔案的權限資料
-f:將特定的檔案系統排除在外,例如咱們沒有到必要把proc檔案系統中的檔案放在資料庫中
-q:安靜模式,不會顯示任何錯誤訊息
-n:至多顯示 n個輸出
-r:使用正規運算式 作尋找的條件
-o:指定資料庫存的名稱
-d:指定資料庫的路徑
-h:顯示輔助訊息
-V:顯示程式的版本訊息
這一章介紹了一些基本的概念,是之後各章的總括,提到的內容都在以後的各章中拆開細講,我認爲這章最重要的就是一句話:
信息=位+上下文
計算機中的信息都是有二進制數字表達的,而由於這些二進制位所處的位置不一樣,是有符號數仍是無符號數,是大端法仍是小端法,因爲具體的解釋不一樣,形成的結果也不一樣。
以後的學習就是如何讀寫位,和上下文如何對應。
這章裏我以爲最容易混淆的是小端法和大端法。經常使用小端法,巧記方式是「高對高,低對低」,可是同時要注意字節在存放的時候的高低與咱們慣常認知中的高低位的關係,以及一串數據中幾位表明一個字節:
一個字節是8位,也就是兩位十六進制數。
而後是整數中,有符號數和無符號數的表示,補碼錶示,位運算和邏輯運算,溢出、截斷和擴展;
浮點數中,二進制小數,最重要的是IEEE小數:
IEEE浮點標準:
編碼規則:
兩種精度
三種被編碼狀況
這一章和以前學習過的彙編很像,須要注意的就是尋址方式和幾個操做,mov,push,pop,leal,還有跳轉指令、控制轉移指令等等。
這章裏學習的是一個相對簡單的處理器Y86,指令集比起IA32省略了不少。學習中我以爲一個比較不容易掌握,作題時須要反覆查閱的是:
指令的字節級編碼
Y86的順序實現
我以爲第六章對於我來講就是其中包含的不少知識點,其中存儲技術和局部性是比較重要的。裏面有不少關於存儲空間的計算。這些計算包含了對於知識的理解。
第七章其中的連接主要講的是靜態連接以及共享庫。
靜態庫
靜態庫是一系列的目標文件(.o文件)的歸檔文件((lib+name).a文 件);連接階段,選擇靜態庫,後綴名爲「.a」;選擇動態庫,後綴名爲「.so」。
靜態連接庫的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o
靜態庫的使用:gcc -o 文件名 文件名.c -L. -lxxx//連接到靜態庫
注意:
-L:在庫文件的搜索路徑列表中添加dir目錄
-l:在頭文件的搜索路徑列表中添加dir目錄
共享庫
共享庫的生成:
gcc -fPIC -c xxx.c
gcc -shared -o libxxx.so xxx.o
共享庫的使用:gcc -o main main.c -L. -lxxx
註冊共享庫的方法:將庫文件直接複製到/lib或者/usr/lib目錄下: cp (lib+name).so /lib
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 24篇 | 350小時 | |
第一週 | 0/0行 | 1/2 | 20小時 | |
第二週 | 53/53行 | 1/3 | 25/45小時 | |
第三週 | 130/183行 | 1/4 | 30/75小時 | |
第四周 | 0/183行 | 0/4 | 5/80小時 | |
第五週 | 158/341行 | 1/5 | 30/110小時 | |
第六週 | 84/425行 | 2/7 | 30/140小時 | |
第七週 | 209/634行 | 1/7 | 30/170小時 | |
第八週 | 0/634行 | 2/9 | 25/195小時 |