Unix/Linux編程實踐教程

Unix/Linux編程實踐教程

《Unix/Linux編程實踐教程》是2004 年10月清華大學出版社出版的圖書,作者是(美)Bruce Molay。

基本介紹

  • 書名:Unix/Linux編程實踐教程
  • 作者:(美)Bruce Molay
  • 譯者:楊宗源 黃海濤
  • 出版社:清華大學出版社
基本信息,內容簡介,作者簡介,目錄,

基本信息

原書名: Understanding Unix/Linux Programming A Guide to Theory and Practice
原出版社: Pearson Education
ISBN:7302096139
上架時間:2005-3-3
開本:16開
頁碼:495
版次:1-1

內容簡介

作業系統是計算機最重要的系統軟體。Unix作業系統歷經了幾十年,至今仍是主流的作業系統。本書通過解釋Unix的工作原理,循序漸進地講解實現 Unix中系統命令的方法,讓讀者理解並逐步精通Unix系統編程,進而具有編制Unix應用程式的能力。書中採用啟發式、舉一反三、圖示講解等多種方法講授,語言生動、結構合理、易於理解。每一章後均附有大量的習題和編程練習,以供參考。
本書適合作為高等院校計算機及相關專業的教材和教學參考書,亦可作為有一定系統編程基礎的開發人員的自學教材和參考手冊。

作者簡介

Bruce Molay,哈佛大學著名教授,從事Unix系統編程和教學十餘年之久,本書就是在哈佛繼續教育學院的Unix systim Programming課程的基礎上,結合作者的實踐、教學經驗編寫而成。

目錄

第1章 unix系統編程概述
1.1 介紹
1.2 什麼是系統編程
1.2.1 簡單的程式模型
1.2.2 系統模型
1.2.3 作業系統的職責
1.2.4 為程式提供服務
1.3 理解系統編程
1.3.1 系統資源
1.3.2 目標:理解系統編程
1.3.3 方法:通過三個問題來理解
1.4 從用戶的角度來理解unix
1.4.1 unix能做些什麼
1.4.2 登錄--運行程式--註銷
1.4.3 目錄操作
1.4.4 檔案操作
1.5 從系統的角度來看unix
1.5.1 用戶和程式之間的連線方式
1.5.2 網路橋牌
1.5.3 bc:unix的計算器
.1.5.4 從bc/dc到web
1.6 動手實踐
1.7 工作步驟與概要圖
1.7.1 接下來的工作步驟
1.7.2 unix的概要圖
1.7.3 unix的發展歷程
小結
第2章 用戶、檔案操作與在線上幫助:編寫who命令
2.1 介紹
2.2 關於命令who
2.3 問題1:who命令能做些什麼
2.4 問題2:who命令是如何工作的
2.5 問題3:如何編寫who
2.5.1 問題:如何從檔案中讀取數據結構
2.5.2 答案:使用open、read和close
2.5.3 編寫wh01.c
2.5.4 顯示登錄信息
2.5.5 編寫wh02.c
2.5.6 回顧與展望
2.6 編寫cp(讀和寫)
2.6.1 問題1:cp命令能做些什麼
2.6.2 問題2:cp命令是如何創建/重寫檔案的
2.6.3 問題3:如何編寫cp
2.6.4 unix編程看起來好像很簡單
2.7 提高檔案i/o效率的方法:使用緩衝
2.7.1 緩衝區的大小對性能的影響
2.7.2 為什麼系統調用需要很多時間
2.7.3 低效率的wh02.c
2.7.4 在wh02.c中運用緩衝技術
2.8 核心緩衝技術
2.9 檔案讀寫
2.9.1 註銷過程:做了些什麼
2.9.2 註銷過程:如何工作的
2.9.3 改變檔案的當前位置
2.9.4 編寫終端註銷的代碼
2.10 處理系統調用中的錯誤
小結
第3章 目錄與檔案屬性:編寫ls
3.1 介紹
3.2 問題1:1s命令能做什麼
3.2.1 1s可以列出檔案名稱和檔案的屬性
3.2.2 列出指定目錄或檔案的信息
3.2.3 經常用到的命令行選項
3.2.4 問題1的答案
3.3 檔案樹
3.4 問題2:1s是如何工作的
3.4.1 什麼是目錄
3.4.2 是否可以用open、read和close來操作目錄
3.4.3 如何讀目錄的內容
3.5 問題3:如何編寫ls
3.6 編寫ls-1
3.6.1 問題1:ls-1能做些什麼
3.6.2 問題2:ls-1是如何工作的
3.6.3 用stat得到檔案信息
3.6.4 stat提供的其他信息
3.6.5 如何實現
3.6.6 將模式欄位轉換成字元
3.6.7 將用戶/組id轉換成字元串
3.6.8 編寫ls2.c
3.7 三個特殊的位
3.7.1 set-user-id位
3.7.2 set-group-id位
3.7.3 sticky位
3.7.4 用ls-1看到的特殊屬性
3.8 ls小結
3.9 設定和修改檔案的屬性
3.9.1 檔案類型
3.9.2 許可位與特殊屬性位
3.9.3 檔案的連結數
3.9.4 檔案所有者與組
3.9.5 檔案大小
3.9.6 時間
3.9.7 檔案名稱
小結
第4章 檔案系統:編寫pwd
4.1 介紹
4.2 從用戶的角度看檔案系統
4.2.1 目錄和檔案
4.2.2 目錄命令
4.2.3 檔案操作命令
4.2.4 針對目錄樹的命令
4.2.5 目錄樹的深度幾乎沒有限制
4.2.6 unix檔案系統小結
4.3 unix檔案系統的內部結構
4.3.1 第一層抽象:從磁碟到分區
4.3.2 第二層抽象:從磁碟到塊序列
4.3.3 第三層抽象:從塊序列到三個區域的劃分
4.3.4 檔案系統的實現:創建一個檔案的過程
4.3.5 檔案系統的實現:目錄的工作過程
4.3.6 檔案系統的實現:cat命令的工作原理
4.3.7 i-節點和大檔案
4.3.8 unix檔案系統的改進
4.4 理解目錄
4.4.1 理解目錄結構
4.4.2 與目錄樹相關的命令和系統調用
4.5 編寫pwd
4.5.1 pwd的工作過程
4.5.2 pwd的一種版本
4.6 多個檔案系統的組合:由多棵樹構成的樹
4.6.1 裝載點
4.6.2 多重i-節點號和設備交叉連結
4.6.3 符號連結
小結
第5章 連線控制:學習stty
5.1 為設備編程
5.2 設備就像檔案
5.2.1 設備具有檔案名稱
5.2.2 設備和系統調用
5.2.3 例子:終端就像檔案
5.2.4 設備檔案的屬性
5.2.5 編寫write程式
5.2.6 設備檔案和i-節點
5.3 設備與檔案的不同之處
5.4 磁碟連線的屬性
5.4.1 屬性1:緩衝
5.4.2 屬性2:自動添加模式
5.4.3 用open控制檔案描述符
5.4.4 磁碟連線小結
5.5 終端連線的屬性
5.5.1 終端的i/o並不如此簡單
5.5.2 終端驅動程式
5.5.3 stty命令
5.5.4 編寫終端驅動程式:關於設定
5.5.5 編寫終端驅動程式:關tx數
5.5.6 編寫終端驅動程式:關於位
5.5.7 編寫終端驅動程式:幾個程式例子
5.5.8 終端連線小結
5.6 其他設備編程:ioctl
5.7 檔案、設備和流
小結
第6章 為用戶編程:終端控制和信號
6.1 軟體工具與針對特定設備編寫的程式
6.2 終端驅動程式的模式
6.2.1 規範模式:緩衝和編輯
6.2.2 非規範處理
6.2.3 終端模式小結
6.3 編寫一個用戶程式:play_again.c
6.4 信號
6.4.1 ctrl-c做什麼
6.4.2 信號是什麼
6.4.3 進程該如何處理信號
6.4.4 信號處理的例子
6.5 為處理信號做準備:play_again4.c
6.6 進程終止
6.7 為設備編程
小結
第7章 事件驅動編程:編寫一個視頻遊戲
7.1 視頻遊戲和作業系統
7.2 任務:單人彈球遊戲(pong)
7.3 螢幕編程:curses庫
7.3.1 介紹curses
7.3.2 curses內部:虛擬和實際螢幕
7.4 時間編程:sleep
7.5 時鐘編程1:alarms
7.5.1 添加時延:sleep
7.5.2 sleep()是如何工作的:使用unix中的alarms
7.5.3 調度將要發生的動作
7.6 時間編程2:間隔計時器
7.6.1 添加精度更高的時延:usleep
7.6.2 三種計時器:真實、進程和實用
7.6.3 兩種間隔:初始和重複
7.6.4 用間隔計時器編程
7.6.5 計算機有幾個時鐘
7.6.6 計時器小結
7.7 信號處理1:使用signal
7.7.1 早期的信號處理機制
7.7.2 處理多個信號
7.7.3 測試多個信號
7.7.4 信號機制其他的弱點
7.8 信號處理2:sigaction
7.8.1 處理多個信號:sigaction
7.8.2 信號小結
7.9 防止數據損毀(datacorruption)
7.9.1 數據損毀的例子
7.9.2 臨界(criticalsections)
7.9.3 阻塞信號:sigprocmask和sigsetops
7.9.4 重入代碼(reentrantcode):遞歸調用的危險
7.9.5 視頻遊戲中的臨界區
7.10 kill:從另--個進程傳送的信號
7.11 使用計時器和信號:視頻遊戲
7.11.1 bounceld.c:在一條線上控制動畫
7.11.2 bounce2d.c:兩維動畫
7.11.3 完成遊戲
7.12 輸入信號,異步i/o
7.12.1 使用異步i/o
7.12.2 方法1:使用oasync
7.12.3 方法2:使用aio..read
7.12.4 彈球程式中需要異步讀人嗎
7.12.5 異步輸入、視頻遊戲和作業系統
小結
第8章 進程和程式:編寫命令解釋器sh
8.1 進程=運行中的程式
8.2 通過命令ps學習進程
8.2.1 系統進程
8.2.2 進程管理和檔案管理
8.2.3 記憶體和程式
8.3 shell:進程控制和程式控制的--個工具
8.4 shell是如何運行程式的
8.4.1 shell的主循環
8.4.2 問題1:一個程式如何運行另一個程式
8.4.3 問題2:女口何建立新的進程
8.4.4 問題3:父進程如何等待子進程的退出
8.4.5 小結:shell如何運行程式
8.5 實現一個shell:psh2.c
8.6 思考:用進程編程
8.7 exit和exec的其他細節
8.7.1 進程死亡:exit和_exit
8.7.2 exec家族
小結
第9章 可程式的shell、shell變數和環境:編寫自己的shell
9.1 shell編程
9.2 什麼是以及為什麼要使用shell腳本語言
9.3 smshl--命令行解析
9.4 shell中的流程控制
9.4.1 if語句做些什麼
9.4.2 if是女口何工作的
9.4.3 在stash中增加if
9.4.4 smsh2.c:修改後的代碼
9.5 shell變數:局部和全局
9.5.1 使用shell變數
9.5.2 變數的存儲
9.5.3 增加變數命令:built-ins
9.5.4 效果如何
9.6 環境:個性化設定
9.6.1 使用環境
9.6.2 什麼是環境以及它是如何工作的
9.6.3 在smsh中增加環境處理
9.6.4 varlib.c的代碼
9.7 已實現的shell的功能
小結
第10章 i/o重定向和管道
10.1 shell編程
10.2 一個shell應用程式:監視系統用戶
10.3 標準i/o與重定向的若干概念
10.3.1 概念1:3個標準檔案描述符
10.3.2 默認的連線:tty
10.3.3 程式都輸出到stdout
10.3.4 重定向i/o的是shell而不是程式
10.3.5 理解i/o重定向
10.3.6 概念2:“最低可用檔案描述符(lowest-available-fd)”原則
10.3.7 兩個概念的結合
10.4 如何將stdin定向到檔案
10.4.1 方法1:closethenopen
10.4.2 方法2:open..close..dup..close
10.4.3 系統調用dup小結
10.4.4 方法3:open..dup2..close
10.4.5 shell為其他程式重定向stdin
10.5 為其他程式重定向i/o:who]userlist
10.6 管道編程
10.6.1 創建管道
10.6.2 使用fork來共享管道
10.6.3 使用pipe、fork以及exec
10.6.4 技術細節:管道並非檔案
小結
第11章 連線到近端或遠端的進程:伺服器與socket(套接宇)
11.1 產品和服務
11.2 一個簡單的比喻:飲料機接口
11.3 bc:unix中使用的計算器
11.3.1 編寫bc:pipe、fork、dup、exec
11.3.2 對協同進程的討論
11.3.3 fdopen:讓檔案描述符像檔案--樣使用
11.4 popen-讓進程看似檔案
11.4.1 popen的功能
11.4.2 實現popen:使用fdopen命令
11.4.3 訪問數據:檔案、應用程式接el(apl)和伺服器
11.5 socket:與遠端進程相連
11.5.1 類比:“電話中傳來聲音:現在時間是…”
11.5.2 網際網路時間、dap和天氣伺服器
11.5.3 服務列表:眾所周知的連線埠
11.5.4 編寫timeserv . cc時間伺服器
11.5.5 測試timeserv.c
11.5.6 編寫timecint.c:時間服務客戶端
11.5.7 測試timecint.c
11.5.8 另一種伺服器:遠程的ls
11.6 軟體精靈
小結
第12章 連線和協定:編寫web伺服器
12.1 伺服器設計重點
12.2 三個主要操作
12.3 操作1和操作2:建立連線
12.3.1 操作1:建立伺服器端socket
12.3.2 操作2:建立到伺服器的連線
12.3.3 socklib.c
12.4 操作3:客戶/服器的會話
12.4.1 使用socklib.c的timeserv/timecint
12.4.2 第2版的伺服器:使用fork
12.4.3 伺服器的設計問題:diy或代理
12.5 編寫web伺服器
12.5.1 web伺服器功能
12.5.2 設計web伺服器
12.5.3 web伺服器協定
12.5.4 編寫web伺服器
12.5.5 運行web伺服器
12.5.6 webserv的源程式
12.5.7 比較web伺服器
小結
第13章 基於數據報(datagram)的編程:編寫許可證伺服器
13.1 軟體控制
13.2 許可證控制簡史
13.3 一個非計算機系統實例:轎車管理系統
13.3.1 轎車鑰匙管理描述
13.3.2 用客戶/伺服器方式管理轎車
13.4 許可證管理
13.4.1 許可證服務系統:它做些什麼
13.4.2 許可證服務系統:如何工作
13.4.3 一個通信系統的例子
13.5 數據報socket
13.5.1 流與數據報的比較
13.5.2 數據報編程
13.5.3 sendto和recvfrom的小結
13.5.4 數據報應答
13.5.5 數據報小結
13.6 許可證伺服器版本1.0
13.6.1 客戶端版本1
13.6.2 伺服器端版本1
13.6.3 測試版本1
13.6.4 進一步的工作
13.7 處理現實的問題
13.7.1 處理客戶端崩潰
13.7.2 處理伺服器崩潰
13.7.3 測試版本2
13.8 分散式許可證伺服器
13.9 unix域socket
13.9.1 檔案名稱作為socket地址
13.9.2 使用unix域socket編程
13.10 小結;socket和伺服器
小結
第14章 執行緒機制:並發函式的使用
14.1 同一時刻完成多項任務
14.2 函式的執行路線
14.2.1 一個單執行緒程式
14.2.2 一個多執行緒程式
14.2.3 相關函式小結
14.3 執行緒間的分工合作
14.3.1 例1:incrprint.c
14.3.2 例2:twordcount.c
14.3.3 執行緒內部的分工合作:小結
14.4 執行緒與進程
14.5 執行緒間互通訊息
14.5.1 通知選舉中心
14.5.2 使用條件變數編寫程式
14.5.3 使用條件變數的函式
14.5.4 回到web伺服器的例子
14.6 多執行緒的web伺服器
14.6.1 web伺服器程式的改進
14.6.2 多執行緒版本允許一個新的功能
14.6.3 防止殭屍執行緒(zombiethreads):獨立執行緒
14.6.4 web伺服器代碼
14.7 執行緒和動畫
14.7.1 使用執行緒的優點
14.7.2 多執行緒版本的bouneeld.c
14.7.3 基於多執行緒機制的多重動畫:tanimate.c
14.7.4 tanimate.c中的互斥量
14.7.5 螢幕控制執行緒
小結
第15章 進程間通信(1pc)
15.1 編程方式的選擇
15.2 talk命令:從多個數據源讀取數據
15.2.1 同時從兩個檔案描述符讀取數據
15.2.2 select系統調用
15.2.3 select與talk
15.2.4 select與poll
15.3 通信的選擇
15.3.1 一個問題的三種解決方案
15.3.2 通過檔案的進程間通信
15.3.3 命名管道
15.3.4 共享記憶體
15.3.5 各種進程間通信方法的比較
15.4 進程之間的分工合作
15.4.1 檔案鎖
15.4.2 信號量(semaphores)
15.4.3 socket及fifo與共享的存儲
15.5 列印池
15.5.1 多個寫者、一個讀者
15.5.2 客戶/伺服器模型
15.6 縱觀ipc
15.7 連線與遊戲
小結

相關詞條

熱門詞條

聯絡我們