幫助中心 | 我的帳號 | 關於我們

高質量嵌入式Linux C編程(第2版)/嵌入式技術與應用叢書

  • 作者:編者:梁庚//陳明//魏峰
  • 出版社:電子工業
  • ISBN:9787121373404
  • 出版日期:2019/09/01
  • 裝幀:平裝
  • 頁數:408
人民幣:RMB 78 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書從嵌入式開發角度出發,以Linux操作系統為開發平台,將隱藏在系統開發背後的關於C語言、電腦組成原理、電腦操作系統等方面的機制和知識娓娓道來,不僅讓讀者知其然,更讓讀者知其所以然。本書揭開嵌入式Linux C系統開發背後的「秘密」,並將這些知識融入編程實踐,從而幫助讀者寫出嵌入式Linux C的高質量代碼。具體說來,本書主要討論了包括嵌入式C語言高級編程、嵌入式Linux系統編程、多任務解決機制、網路編程、高性能伺服器設計等多個方面的內容。
    本書既可作為大專院校相關專業師生的教學參考書,也可供電腦及其相關領域的工程技術人員查閱。對於普通電腦愛好者,本書也不失為一本幫助掌握高質量嵌入式Linux C系統開發的深入淺出的讀物。

作者介紹
編者:梁庚//陳明//魏峰

目錄
第1章  嵌入式Linux C語言開發工具
  1.1  嵌入式Linux C語言開發概述
  1.2  嵌入式Linux C開發環境
  1.3  嵌入式文本編輯器
    1.3.1  基本模式
    1.3.2  基本操作
    1.3.3  實訓操作
  1.4  嵌入式編譯器
    1.4.1  初識GCC編譯器
    1.4.2  gcc命令常用選項和工作流程
    1.4.3  庫的使用
  1.5  嵌入式調試器
  1.6  工程管理器
    1.6.1  Makefile
    1.6.2  Makefile特性介紹
  1.7  Eclipse程序開發
    1.7.1  Eclipse環境安裝
    1.7.2  Eclipse C程序開發
  1.8  軟體版本管理
    1.8.1  Git版本管理
    1.8.2  Ubuntu軟體包管理
第2章  數據類型
  2.1  變數與常量
  2.2  變數
    2.2.1  什麼是變數
    2.2.2  變數名和變數值
    2.2.3  局部變數和全局變數
  2.3  常量
  2.4  基本內置類型
    2.4.1  數據類型及其大小
    2.4.2  陷阱——有符號與無符號
  2.5  聲明與定義
    2.5.1  定義
    2.5.2  聲明
  2.6  static與extern
    2.6.1  static
    2.6.2  extern
  2.7  const
  2.8  auto
  2.9  register
  2.10  volatile
  2.11  typedef詳解
    2.11.1  typedef與結構的問題
    2.11.2  typedef與#define的問題
    2.11.3  typedef與#define的另一例
    2.11.4  typedef與複雜的變數聲明
  2.12  枚舉(enum)
    2.12.1  枚舉類型的使用方法
    2.12.2  枚舉與#define宏的區別
  2.13  聯合體

    2.13.1  聯合體的定義
    2.13.2  從兩道經典試題談聯合體(union)的使用
第3章  運算符和表達式
  3.1  運算符簡介
    3.1.1  運算符優先順序
    3.1.2  一些容易出錯的優先順序問題
    3.1.3  邏輯運算符
  3.2  條件運算符和條件表達式
  3.3  ++、--操作符
  3.4  位運算
    3.4.1  按位與運算及應用
    3.4.2  按位或運算及應用
    3.4.3  按位異或運算及應用
    3.4.4  左移和右移
  3.5  C語言性能優化:使用位操作
第4章  語句
  4.1  空語句
  4.2  基礎語句
    4.2.1  表達式語句
    4.2.2  函數調用語句
  4.3  if語句
    4.3.1  布爾變數與零值的比較
    4.3.2  整型變數與零值比較
    4.3.3  浮點變數與零值的比較
    4.3.4  指針變數與零值的比較
    4.3.5  對if語句的補充說明
  4.4  跳轉語句:goto
  4.5  循環語句
    4.5.1  do-while語句
    4.5.2  for語句
    4.5.3  循環語句的效率
  4.6  break和continue
    4.6.1  break語句
    4.6.2  continue語句
  4.7  switch語句
第5章  數組與指針
  5.1  數組認知
  5.2  使用數組的常見問題
    5.2.1  數組的下標總是從0開始嗎
    5.2.2  可以使用數組後面第一個元素的地址嗎
    5.2.3  為什麼要小心對待位於數組後面的那些元素的地址呢
    5.2.4  當數組作為參數傳遞給函數時,可以通過sizeof得到數組的大小嗎
    5.2.5  指針或帶下標的數組名都可以訪問元素,哪一種更好呢
    5.2.6  可以把另外一個地址賦給一個數組名嗎
    5.2.7  array_name和&array_name有什麼不同
    5.2.8  為什麼用const說明的常量不能用來定義一個數組的初始大小
    5.2.9  字元串和數組有什麼不同
  5.3  指針
    5.3.1  指針是變數
    5.3.2  指針的類型和指針所指向的類型

    5.3.3  指針的值
    5.3.4  指針本身所佔據的內存
  5.4  指針的運算
    5.4.1  指針的算術運算
    5.4.2  指針的關係運算
    5.4.3  間接引用
    5.4.4  最多可以使用幾層指針
  5.5  常量指針和指針常量
    5.5.1  常量指針與指針常量的實例
    5.5.2  常量指針的應用
  5.6  空指針及其使用
    5.6.1  NULL總是被定義為0嗎
    5.6.2  NULL總是等於0嗎
    5.6.3  空指針的使用
  5.7  void指針:萬能指針
  5.8  指針數組與數組指針
  5.9  字元串函數詳解
  5.10  函數指針與指針函數
  5.11  複雜指針聲明:「int*(*(*fp1)(int)[10];」
    5.11.1  基礎
    5.11.2  const修飾符
    5.11.3  typedef的妙用
    5.11.4  函數指針
    5.11.5  右左法則
第6章  內存管理
  6.1  數據放在哪裡
    6.1.1  未初始化的全局變數(.bss段)
    6.1.2  初始化過的全局變數(.data段)
    6.1.3  常量數據(.rodata段)
    6.1.4  代碼(.text段)
    6.1.5  棧(stack)
    6.1.6  堆(heap)
  6.2  內存分配方式
  6.3  野指針
  6.4  常見的內存錯誤及對策
  6.5  段錯誤及其調試方法
    6.5.1  方法一:利用gdb逐步查找段錯誤
    6.5.2  方法二:分析core文件
    6.5.3  方法三:在發生段錯誤時啟動調試
    6.5.4  方法四:利用backtrace和objdump進行分析
  6.6  指針與數組的對比
第7章  預處理和結構體
  7.1  宏定義:#define
    7.1.1  無參宏定義
    7.1.2  帶參宏定義
  7.2  文件包含
  7.3  條件編譯
  7.4  宏定義的使用技巧
  7.5  關於#和
  7.6  結構體(struct)

    7.6.1  內存位元組對齊
    7.6.2  內存對齊的正式原則
  7.7  #define和typedef的區別
  7.8  結構體(struct)和聯合體(union)的區別
  7.9  淺談C語言中的位段
    7.9.1  位段的使用
    7.9.2  位段結構在內存中的存儲方式
第8章  函數
  8.1  函數聲明與定義
    8.1.1  定義
    8.1.2  聲明與定義不同
  8.2  形式參數和實際參數
  8.3  參數傳遞
    8.3.1  簡單變數或數組元素作為函數參數
    8.3.2  指針變數或數組名作為函數參數
    8.3.3  數組名作為函數參數
    8.3.4  結構體數組作為函數參數
  8.4  如何編寫有多個返回值的C語言函數
    8.4.1  利用全局變數
    8.4.2  傳遞數組指針
    8.4.3  傳遞結構體指針
  8.5  回調函數
  8.6  變參函數詳解:printf函數的實現
  8.7  可變參數的相關問題
第9章  編碼規範
  9.1  排版
  9.2  註釋
  9.3  標示符名稱
第10章  shell編程
  10.1  什麼是shell
  10.2  幾種流行的shell
  10.3  shell程序設計(基礎部分)
    10.3.1  shell的基本語法
    10.3.2  shell程序的變數和參數
  10.4  shell程序設計的流程式控制制
    10.4.1  test命令
    10.4.2  if條件語句
    10.4.3  for循環
    10.4.4  while和until循環
    10.4.5  case條件選擇
    10.4.6  無條件控制語句break和continue
    10.4.7  函數定義
  10.5  命令分組
  10.6  用trap命令捕捉信號
  10.7  運行shell程序的方法
  10.8  bash程序的調試
  10.9  bash的內部命令
第11章  文件操作
  11.1  Linux文件結構
    11.1.1  Linux文件系統

    11.1.2  Linux目錄結構
    11.1.3  Linux文件分類
    11.1.4  常見的文件類型
    11.1.5  Linux文件屬性
  11.2  系統調用
  11.3  Linux文件描述符
  11.4  不帶緩存的I/O操作
    11.4.1  creat函數
    11.4.2  open函數
    11.4.3  read函數
    11.4.4  write函數
    11.4.5  lseek函數
    11.4.6  close函數
    11.4.7  經典範例:文件複製
  11.5  帶緩存的I/O操作
    11.5.1  3種類型的緩衝
    11.5.2  fopen函數
    11.5.3  fclose函數
    11.5.4  fdopen函數
    11.5.5  fread函數
    11.5.6  fwrite函數
    11.5.7  fseek函數
    11.5.8  fgetc函數、getc函數和getchar函數
    11.5.9  fputc函數、putc函數和putchar函數
  11.6  fgets函數與gets函數的比較分析
  11.7  輸出與輸入
    11.7.1  printf函數、fprintf函數和sprintf函數
    11.7.2  scanf函數、fcanf函數和sscanf函數
第12章  進程式控制制編程
  12.1  為何需要多進程
    12.1.1  進程
    12.1.2  進程分類
    12.1.3  進程的屬性
    12.1.4  父進程和子進程
  12.2  Linux進程管理
    12.2.1  ps監視進程工具
    12.2.2  pgrep查詢進程工具
    12.2.3  終止進程的工具kill、killall、pkill和xkill
    12.2.4  top監視系統任務的工具
    12.2.5  進程的優先順序:nice和renice
  12.3  Linux進程的三態
    12.3.1  三種基本狀態
    12.3.2  三種狀態間的轉換
  12.4  Linux進程結構
  12.5  Linux進程式控制制塊PCB
  12.6  Linux進程調度
    12.6.1  調度的目標
    12.6.2  調度演算法
    12.6.3  優先順序反轉
  12.7  進程創建

    12.7.1  獲取進程
    12.7.2  啟動進程:fork()
    12.7.3  啟動進程:vfork()
    12.7.4  啟動進程:exec族
    12.7.5  啟動進程:system
  12.8  進程等待
    12.8.1  僵屍進程的產生
    12.8.2  如何避免僵屍進程
    12.8.3  wait函數和waitpid函數
  12.9  進程退出
    12.9.1  退出方式的不同點
    12.9.2  exit函數和_exit 函數
    12.9.3  exit函數和_exit函數的區別
  12.10  守護進程
    12.10.1  守護進程概述
    12.10.2  守護進程的創建
    12.10.3  創建守護進程的一般步驟
    12.10.4  利用庫函數daemon創建守護進程
第13章  進程間通信方式
  13.1  進程間通信方式概述
    13.1.1  進程間通信的目的
    13.1.2  Linux進程間通信方式簡介
  13.2  管道通信
    13.2.1  創建無名管道
    13.2.2  讀寫無名管道
    13.2.3  無名管道應用實例
    13.2.4  創建有名管道
    13.2.5  讀寫有名管道
  13.3  管道通信方式的應用場景
  13.4  信號
    13.4.1  信號及信號來源
    13.4.2  信號種類
    13.4.3  信號處理方式
    13.4.4  信號發送
    13.4.5  自定義信號處理方式
    13.4.6  信號集操作
    13.4.7  使用信號注意事項
  13.5  消息隊列
    13.5.1  消息隊列基礎理論
    13.5.2  使用消息隊列
    13.5.3  消息隊列API
    13.5.4  消息隊列的限制
    13.5.5  消息隊列的應用實例
  13.6  信號燈
    13.6.1  信號燈概述
    13.6.2  內核實現原理
    13.6.3  使用信號燈
    13.6.4  信號燈API
    13.6.5  信號燈的限制
    13.6.6  競爭問題

    13.6.7  信號燈應用實例
  13.7  共享內存方式一
    13.7.1  內核實現原理
    13.7.2  mmap()及其相關係統調用
    13.7.3  mmap()範例
    13.7.4  對mmap()返回地址的訪問
  13.8  共享內存方式二
    13.8.1  系統V共享內存原理
    13.8.2  系統V共享內存API
    13.8.3  系統V共享內存範例
第14章  多線程編程
  14.1  線程概述
    14.1.1  為什麼有了進程的概念后,還要再引入線程呢
    14.1.2  多線程的優點
    14.1.3  多線程的缺點
  14.2  多線程的實現
    14.2.1  線程的創建
    14.2.2  終止線程
    14.2.3  等待線程終止
  14.3  線程屬性
    14.3.1  線程屬性初始化
    14.3.2  線程分離
    14.3.3  線程的繼承性
    14.3.4  線程的調度策略
    14.3.5  線程的調度參數
    14.3.6  實例分析
  14.4  線程同步機制
    14.4.1  互斥鎖(Mutex)
    14.4.2  互斥鎖使用實例
    14.4.3  條件變數(Conditions)
    14.4.4  條件變數使用實例
第15章  網路編程
  15.1  TCP/IP協議概述
    15.1.1  TCP/IP協議的起源
    15.1.2  TCP/IP協議的特性與應用
    15.1.3  互聯網地址
    15.1.4  域名系統
    15.1.5  封裝
    15.1.6  TCP/IP協議的工作模型
    15.1.7  TCP/IP協議層
    15.1.8  TCP/IP協議的應用
    15.1.9  網橋、路由器和網關
  15.2  TCP和UDP
    15.2.1  TCP
    15.2.2  三次握手
    15.2.3  TCP數據報頭
    15.2.4  UDP
    15.2.5  協議的選擇
    15.2.6  埠號和IP地址
  15.3  套接字

    15.3.1  Socket的概念
    15.3.2  Socket的類型
    15.3.3  Socket的信息數據結構
    15.3.4  數據存儲優先順序的轉換
    15.3.5  地址格式轉化
    15.3.6  名字地址轉化
  15.4  網路編程
    15.4.1  建立Socket通信
    15.4.2  綁定地址
    15.4.3  監聽
    15.4.4  接受請求
    15.4.5  連接伺服器
    15.4.6  發送數據
    15.4.7  接收數據
  15.5  採用TCP協議的C/S架構實現
    15.5.1  模塊封裝
    15.5.2  伺服器端的實現
    15.5.3  客戶端的實現
  15.6  併發伺服器模型
    15.6.1  多進程解決方案
    15.6.2  多線程解決方案
    15.6.3  調用fcntl將sockfd設置為非阻塞模式
  15.7  多路轉接模型
    15.7.1  伺服器端的實現
    15.7.2  客戶端的實現
  15.8  採用UDP的C/S架構的實現
    15.8.1  伺服器端的實現
    15.8.2  客戶端的實現
    15.8.3  UDP傳輸文件的實現
第16章  SQLite3資料庫編程
  16.1  SQLite資料庫簡介
  16.2  SQLite3的命令
  16.3  SQLite編程介面
    16.3.1  資料庫的打開與關閉
    16.3.2  資料庫的語句執行
    16.3.3  資料庫查詢語句操作
第17章  高性能伺服器設計
  17.1  select系統調用
    17.1.1  select API
    17.1.2  fd_set
    17.1.3  文件描述符就緒條件
    17.1.4  select實現TCP循環伺服器案例分析
  17.2  poll系統調用
    17.2.1  poll API
    17.2.2  poll函數的事件標識符
    17.2.3  返回值和錯誤代碼
    17.2.4  poll實現TCP循環伺服器案例分析
  17.3  epoll 列系統調用
    17.3.1  select的缺陷
    17.3.2  內核事件表

    17.3.3  epoll_wait函數
    17.3.4  LT模式和ET模式
  17.4  xinetd配置
    17.4.1  Linux守護進程
    17.4.2  超級服務xinetd
    17.4.3  xinetd配置文件
參考文獻

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032