linux程式設計(第2版)
第2章 shell程式設計
1. 在一個指令碼程式裡執行另外一個指令碼程式要比執行一個函數慢的多;執行結果的回傳也更困難;並且可能造成小指令碼過多的現象.
在linux系統中,/bin/sh命令通常只是一個到實際應用中的shell的連結.它在大部分linux系統上是一個指向/bin/bash的連結.
2. 在一台unix系統上,你永遠可以保證有一個基本的shell.事實上,如果沒有/bin/bash,大部分unix系統根本就不能夠開機引導,更不用說讓使用者登入上機了.
3. 在shell指令碼程式的內部我們可以執行兩大類命令令,即可以在命令提示字元處執行的普通命令和我們前面提到的"內建"命令."內建"命令是在shell內部實現的,不能做為外部程式被調用.大部分命令都是POSIX技術規範的組成部分,並且經常會提供有獨立的對應程式.命令是內部還是外部的一般沒有多大的重要性,只是內部命令執行起來效率更高.
既然提到了命令再實現的問題,我們需要瞭解一下UNIX怎樣把一個程式用做幾個命令或不同的檔案.用"ls-l"命令查看一下mv,cp和ln命令,我們會發現,他們在許多系統上的實現都是同一個檔案,只不過用ln命令建立錄幾個不同的名字而已.當這個命令被調用的時候,他會先檢查自己的第一個參數---在UNIX下這將是該命令本身的名字,然後再決定將要採取什麼樣的動作.
4. : 冒號命令
這是一個空命令,它偶爾會被用來簡化邏輯條件,相當於true的一個假名.因為它是內建的,所以它比true啟動並執行更快,但它的可讀性要差了不少.
: 還可被用來對變數進行條件化設定的情況下,比如
: ${var:=value}
如果沒有":",shell會嘗試把$var解釋成一個命令
5. exec命令
exec有兩種不同的用法(1)它經常被用來以另一個不同的程式替換掉當前的shell
(2)第二個用法是修改當前檔案的描述符:exec 3 < afile
第3章 如何使用和處理檔案
1. 比較重要的裝置檔案有3個:
(1)/dev/console裝置
代表控制台
(2)/dev/tty
特殊檔案/dev/tty是進程式控制制終端(鍵盤和顯示屏,或者鍵盤和視窗)的一個假名(邏輯裝置)
需要提醒大家的是,/dev/console裝置只有一個,但是通過/dev/tty能夠訪問的物理裝置卻可以很多
(3)/dev/null
空(null)裝置
2. 檔案流與檔案描述符的關係
每個檔案流都和一個底層檔案描述符相關聯著.我們可以把底層的輸入輸出操作和高層的檔案流操作混在一起,但一般來說這並不是明智的方法,因為它會使資料緩衝的後果難以預料.
#include <stdio.h>
int fileno(FILE*stream);
FILE*fdopen(int fileno,const char*mode);
3. 檔案與子目錄的維護
int chmod(const char *path,mode_t mode);
int chown(const char *path,uid_t owner,gid_t group);
int mkdir(const char *path,mode_t mode);
int rmdir(const char *path);
int chdir(const char *path);//cd 命令
int *getcwd(char *buf,size_t size);
(待續)