1. 程式人生 > >《Linux程式設計》第4版 核心筆記

《Linux程式設計》第4版 核心筆記

【前言】
讀本書的學習目標:
1. 掌握標準linux C語言函式庫和箇中linux或unix標準指定的其他工具的使用方法
2. 掌握如何使用大多數標準linux開發工具
3. 學會通過DBM和MySQL資料庫系統儲存Linux中的資料
4. 理解如何為X視窗系統建立圖形使用者介面,同時使用GTK和Qt函式庫
5. 擁有開發自己的實際應用程式的信心和能力

一個貫穿全書的大型示例專案:
一個簡單的用於記錄音樂CD詳細資料的資料庫應用程式。

檔案操作、從linux環境中獲取資訊、處理終端的輸入輸出、curses函式庫

GTK+工具包:是GNOME開發環境的基礎;
Qt工具包:是KDE開發環境的基礎。

本書所有原始碼下載地址:
http://www.wrox.com/WileyCDA/WroxTitle/Beginning-Linux-Programming-4th-Edition.productCd-0470147628,descCd-DOWNLOAD.html


【第一章:入門】

Linux:GNU/Linux
GNU專案自由軟體官網:http://www.gnu.org
linux實際是一個核心,在核心上安裝許多自由釋出的軟體,從而完成一個linux系統。
linux程式設計,就是C語言程式設計。
linux程式包含兩種特殊型別的檔案:可執行檔案、指令碼檔案。
系統級的應用程式,可以放在目錄:/usr/local/ 目錄中來執行和訪問所需的檔案。
對於開發用和個人的應用程式,最好在家目錄中使用一個資料夾來存放它。
系統提供的標頭檔案都位於:/usr/include/ 目錄下。
    $:' grep EXIT_ /usr/include/*.h

    //在/usr/include/目錄下所有以.h結尾的檔案中搜索字串EXIT_
庫,是一組預先編譯好的函式的集合,這些函式都是按照可重用的原則編寫的。
標準系統庫檔案存放於:/lib/ 或 /usr/lib/ 下。
靜態庫:一組處於“準備好使用”狀態的目標檔案。必須使用 -l 選項指明除標準C語言執行庫以外還需要使用的庫。
靜態庫,也稱作歸檔檔案,檔名都以 .a 結尾。
靜態庫製作
    $:' gcc -c *.c
    // 建立目標模組.o檔案
    $:' ar -crv *.o libfoo.a
    // 建立foo靜態庫檔案libfoo.a
    $:' ranlib libfoo.a
    // linux下ranlib不是必須操作,做了也無妨。(是為衍生的unix系統生成內容表)
    $:' gcc -o program program.o -L. -lfoo

    // -L選項告訴編譯器庫檔案的位置;-l選項告訴編譯器是哪個靜態庫
共享庫即動態庫,程式本身不包含函式程式碼,引用執行時才訪問共享程式碼的庫檔案。
    $:' ldd program
    // ldd命令檢視程式鎖需要的共享庫檔案
man命令,用來訪問線上手冊頁。
    $:' man gcc
    // space空格鍵讀下一頁,enter回車鍵讀下一行,q鍵退出。
    // f鍵下一屏,b鍵上一屏。
info命令,在GNU軟體和其他一些自由軟體中的線上文件系統。通過連結和交叉引用來瀏覽文件並可以直接跳轉相關的章節。
    $:' info gcc
    // Ctrl+H可以看到info的操作指南


【第二章:shell程式設計】
shell執行shell程式,這些程式通常稱為 指令碼 ,執行時是解釋執行的。
    $:' ls -al | more
    // ls和more命令,通過管道實現了檔案列表的分屏顯示。
    $:' man bash | col -b | lpr
    // bash資訊進行顯示和列印
重定向輸出:
    $:' ls -l > lsoutput.txt
    // 把ls命令的輸出結果儲存到檔案lsoutput.txt中
    $:' ps >> lsoutput.txt
    // 把ps命令的輸出結果附加到檔案lsoutput.txt中
    $:' kill -l 1234 >killouterr.txt 2>&1
    // 將標準輸出重定向到檔案killouterr.txt中,然後講標準錯誤輸出重定向到與標準輸出相同的地方
重定向輸入:
    $:' more < killouterr.txt
    // linux下重定向輸入的話意義不大
管道:
    $:' ps -xo comm | sort | uniq | grep -v sh | more
    // 首先按字母順序排序ps命令的輸出,再用uniq命令去除名字相同的程序,然後用grep -v sh命令刪除名為sh的程序,最終將結果分頁顯示在螢幕上
shell的語法:
    變數:=賦值,兩邊不能有空格
    // 使用read命令將使用者輸入的值賦值給一個變數
    環境變數:$HOME  $PATH  $PS1  $PS2  $IFS  $0  $#  $$
    引數變數:$1,$2,...  $*  [email protected]
    條件:test 或 [ ]
    控制結構:
        if語句
        if [ condition ]
        then
            statements
        else
            statements
        fi

        elif語句(else if)
/* if指令碼例子 */
#!/bin/sh

echo "Is it morning? Please answer yes or no"
read timeofday

if [ $timeofday = "yes" ]; then
    echo "Good morning"
else
    echo "Good afternoon"
fi

exit 0
/* ----------- */

    echo -e 可以實現每一行後面的換行符。
    for語句
    for variable in values
    do
        statesments
    done

/* for指令碼例子 */
#!/bin/sh

for file in $(ls *); do
    echo $file
done

exit 0
/* ----------- */

    while語句
    while condition do
        statesments
    done

/* while指令碼例子 */
#!/bin/sh

echo "Enter passwd"
read trythis

while [ "$trythis" != "secret" ]; do
    echo "Sorry, try again..."
    read trythis
done
echo "success..."

exit 0
/* ----------- */
...更多內容詳見 《linux程式設計》第4版.pdf

相關推薦

Linux程式設計4 核心筆記

【前言】 讀本書的學習目標: 1. 掌握標準linux C語言函式庫和箇中linux或unix標準指定的其他工具的使用方法 2. 掌握如何使用大多數標準linux開發工具 3. 學會通過DBM和MySQL資料庫系統儲存Linux中的資料 4. 理解如何為X視窗系統建立圖形使

Python程式設計(4 套裝上下冊) pdf 下載

 本書是Python應用的手冊指南,它涵蓋了Python程式設計的方方面面,從系統管理到圖形介面程式設計,從文字處理到網路程式設計,從資料庫到語言擴充套件……這些主題的探討中,作者提供了大量的實際程式碼,通過對這些程式碼的研讀,對讀者的Python程式設計水平以及實際業務問題的解決都將不無裨益

JavaScript高階程式設計學習筆記(一)之資料型別區分詳談

  null、NaN、undefined三者的區別是什麼?   在初次接觸到JavaScript的時候,傻傻的分不清null、NaN、undefined三者到底區別何在,在實際的專案開發中也因為這個問題而困惑久矣。針對這個問題,我特意查找了多方資料,在筆記本上做了詳細的分析記錄,但是由於紙質資料不便於攜帶、

《Lua程式設計(4)》:6章練習答案

練習6-1 function exercise6_1(array) for i=1,#array,1 do io.write(table.unpack(array,i,i)," ") end end 練習6-2 function exercise6_2(

《Javascript 高階程式設計()》筆記0x8 OOP 理解物件

         ECMA-262 把物件定義為:“無序屬性的集合,其屬性可以包含基本值、物件或者函式。”嚴格來講,這就相當於說物件是一組沒有特定順序的值。物件的每個屬性或方法都有一個名字,而每個名字都對映到一個值。  

《Lua程式設計(4)》:5章練習答案

練習5.1 monday sunday sunday 練習5.2 一樣,都指向該表。 a.a.a.a=3,執行的是該表的索引 a 賦值為3,之後的a.a.a.a將會引發異常,因現a.a=3,而非

《Javascript 高階程式設計()》筆記0x9 OOP 建立物件

目錄  建立物件     工廠模式      建構函式模式       將建構函式當作函式        建構函式的問題  

《Javascript 高階程式設計()》筆記0xC BOM window 物件

目錄   window 物件     全域性作用域      視窗關係及框架       top         parent

《Javascript 高階程式設計()》筆記0xB 函式表示式

  目錄 遞迴 閉包     閉包與變數     關於this物件     記憶體洩漏 模仿塊級作用域 私有變數        特權方法(privil

《Javascript 高階程式設計()》筆記0xA OOP 繼承

  目錄 原型鏈      別忘記預設的原型     確定原型和例項的關係       instanceof 操作符       isPrototype

《Javascript 高階程式設計()》筆記0x7 引用型別(2)

目錄   Function 型別      沒有過載     函式宣告與函式表示式      作為值的函式       將一個函式作為另一個函

《Javascript 高階程式設計()》筆記0x6 引用型別(1)

目錄  Object型別 Array 型別     檢測陣列     轉換方法         toString(),valueOf()       &

《Javascript 高階程式設計()》筆記0x5 變數|作用域|記憶體

目錄   基本型別和引用型別的值    動態的屬性     複製變數值    傳遞引數    檢測型別  執行環境及作用域     &

《Javascript 高階程式設計()》筆記0x4 JavaScript基本概念(3)

目錄   語句   if語句   do-while語句   while語句   for語句   for-in語句   label語句   break和continue語句 &n

《Javascript 高階程式設計()》筆記0x3 JavaScript基本概念(2)

目錄   操作符     一元操作符     位操作符     布林操作符     乘性操作符     加性操作符     關係操作符

《Javascript 高階程式設計()》筆記0x2 JavaScript基本概念(1)

目錄 語法 變數 資料型別     typeof:     Undefined型別      Null型別     Boolean型別     Numbe

《Javascript 高階程式設計()》筆記0x1 JavaScript簡介

誕生         受網速限制,急需一種機制可以在客戶端完成輸入驗證。         Netscape:LiveScript-->JavaScript    

《Javascript 高階程式設計()》筆記0xD BOM location、navigator、screen、history

目錄 location 物件      查詢字串引數     位置操作          replace()        &

《Javascript 高階程式設計()》筆記0x11 DOM操作技術

動態指令碼 <script type="text/javascript" src="client.js"></script> function loadScript(url){ var script = document.createElement("scri

《Javascript 高階程式設計()》筆記0x10 節點:Element、Text、Comment等

目錄 Element型別     HTML 元素      取得特性     設定特性      attributes 屬性