① C語言是哪個公司的產品
C語言之所以要起名為「C」,是取的「BCPL」的第二個字母(第一個字母用來命名之前被發明的B語言) 。當C語言發展到頂峰的時刻,出現了一個版本叫C with Class,那就是C++最早的版本,在C語言中增加class關鍵字和類,那個時候有很多版本的C都希望在C語言中增加類的概念;後來C標准委員會決定為這個版本的C起個新的名字,那個時候徵集了很多種名字,最後採納了其中一個人的意見,以C語言中的++運算符來體現它是C語言的進步,故而叫C++,成立了C++標准委員會。 美國AT&T貝爾實驗室的本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)博士在20世紀80年代初期發明並實現了C++(最初這種語言被稱作「C with Classes」)。一開始C++是作為C語言的增強版出現的,從給C語言增加類開始,不斷的增加新特性。虛函數(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、命名空間(name space)逐漸被加入標准。1998年國際標准組織(ISO)頒布了C++程序設計語言的國際標准ISO/IEC 1988-1998。C++是具有國際標準的編程語言,通常稱作ANSI/ISO C++。1998年是C++標准委員會成立的第一年,以後每5年視實際需要更新一次標准,下一次標准更新原定是在2009年,目前我們一般稱該標准C++0x,但是由於對於新特性的爭端激烈,除了在Technical Report 1(tr1)中的新增修改被基本確定外,完整的標准還遙遙無期。況且遺憾的是,由於C++語言過於復雜,以及經歷了長年的演變,直到現在(2010年)都沒有有一個編譯器完全符合這個標准。
編輯本段組成部分
根據Effective C++第三版第一條款的描述,現在C++由以下四個「子語言」組成: 1、C子語言。C++支持C語言的幾乎全部功能,主要是c89的部分,在語法上與C語言僅有極微妙的差別(如括弧表達式的左右值性,具體請參考C++標准文獻)。 2、面向對象的C++語言。C++語言原本不具備面向對象的設計功能,然而隨著面向對象編程的概念的提出以及如Java等語言的發展成熟,C++語言也開發出了支持面向對象功能的版本. 3、泛型編程語言。C++強大(但容易失控的)模板功能使它能在編譯期完成許多工作,從而大大提高運行期效率。 4、STL(C++標准模板庫,Standard Template Library)。隨著STL的不斷發展,它已經逐漸成為C++程序設計中不可或缺的部分,其效率可能比一般的native代碼低些,但是其安全性與規范性使它大受歡迎。 此外,包含在TR1等中的C++0x將實現的新功能在開發和測試中。
編輯本段語言發展
C++語言發展大概可以分為三個階段: 第一階段從80年代到1995年。這一階段C++語言基本上是傳統類型上的面向對象語言,並且憑借著接近C語言的效率,在工業界使用的開發語言中占據了相當大份額; 第二階段從1995年到2000年,這一階段由於標准模板庫(STL)和後來的Boost等程序庫的出現,泛型程序設計在C++中占據了越來越多的比重性。當然,同時由於Java、C#等語言的出現和硬體價格的大規模下降,C++受到了一定的沖擊; 第三階段從2000年至今,由於以Loki、MPL等程序庫為代表的產生式編程和模板元編程的出現,C++出現了發展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程序設計語言中最復雜的一員。
編輯本段入門書籍
C++是一種語言,僅僅是它的語法、特性、標准類庫就已經是一門非常高深的課程,所以在開始學習的時候,必須先要打好基礎。在市面上有很多Visual C++的書,雖然其中可能會花1-2章來介紹C++的基本特性,但是那絕對不會讓你入門。因此,初學者學習C++應該選擇針對C++語言本身的書籍,而不能是針對Visual C++、MFC或者Windows API的。 學習C++應該由易至難,循序漸進。以前經常有人說學習C++之前應該學習C語言。事實上那不是必須的,C++和C語言雖然有關系,但仍然是兩種不同的語言。當然,在學習C++之前學習過其他編程語言是很有好處的。那會使學習C++的速度更快,畢竟很多計算機語言的概念都是相通的。而對於零基礎的初學者來說,則是應該靜下心來,不要急躁。要成為C++的高手,不是那麼容易的,必須要花很大的努力。 從入門教材的選擇上,主要看學習者的自身情況。如果已經有過學習高級語言的經歷,那麼推薦使用譚浩強的《C++程序設計》。注意是04年版的,06年版的那本書是閹割版,上來就面向對象。雖然說C和C++是相似的,但是前面已經說了,C和C++應該作為兩種語言來學習,所以06年的那本內容就稍微欠缺一點了。譚浩強04版的這本書內容比較規整的,條理也很清晰。如果有過其他高級語言的基礎,那麼估計半年就能對C++的概況有個了解了。譚浩強老師的書已經成為了全國各大高等院校的教科書,是比較受到認可的。 如果是從零基礎開始學C++,那麼推薦使用潘嘉傑的《易學C++》。這本書是2008年出的新書,聽說是個學生在讀書的時候寫的。這本書網上有下載免費的電子版。這本書主要就是針對初學者的,講得也比較生動有趣,比較提得起學習的興趣。所以沒有基礎的初學者選這本書也是不錯的,就是想要很快成為高手,可能看這本書還不夠。 至於看完入門的書之後,就應該看一些高層次的書了。比如<<The C++ Programming Language>>和<<C++ Primer>>,同時也可以向STL、MFC、API等各個方向發展。如果對別的語言感興趣,還能去看看C#和Java,它們和C++從語法和很多概念上都是類似的。
編輯本段設計原則
· C++設計成靜態類型、和C同樣高效且可移植的多用途程序設計語言。 · C++設計成直接的和廣泛的支援多種程序設計風格(程序化程序設計、資料抽象化、面向對象程序設計、泛型程序設計)。 · C++設計成給程序設計者更多的選擇,即使可能導致程序設計者選擇錯誤。 · C++設計成盡可能與C兼容,籍此提供一個從C到C++的平滑過渡。 · C++避免平台限定或沒有普遍用途的特性。 · C++不使用會帶來額外開銷的特性。 · C++設計成無需復雜的程序設計環境。 出於保證語言的簡潔和運行高效等方面的考慮,C++的很多特性都是以庫(如STL)或其他的形式提供的,而沒有直接添加到語言本身里。關於此類話題,C++之父的《C++語言的設計和演化》 里做了詳盡的陳述。 Hello World程序
在使用兼容C89標准(也稱為ANSI C)的編譯器時,下面這個程序顯示「Hello, world!」然後結束運行:
(事實上這並不是符合98標准[ISO C++]的C++程序,而且在多數編譯器上這個程序也不能運行,若要在比較舊的編譯器上編譯該程序,應將stdio.h改為iostream.h)
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}
(以上是c語言代碼,c++語言是c語言高一級的版本)
在使用兼容C++98標准(ISO/IEC 14882-1998)的編譯器時,下面的程序也是可以的:
#include <iostream.h>
int main()
{
cout << "Hello, world!" << endl;
return 0;
}
在使用兼容C++ STL的編譯器時,應當是:
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello,world!"<<endl;
return 0;
}
根據ISO C++的規定,main函數的形式只能是
int main(void)
{
...
}
以及
int main(int argc,char * argv[])
{
...
}
盡管如此,但在Visual C++ 2003以前的Microsoft Visual Studio編譯器上,
void main()
{
...
}
也被支持,但這並不正確,也不標准。這樣的寫法會使程序代碼喪失跨平台的特性。每年都有專業人士規定C++的語法,這也是C++優於其他編程語言的原因之一,由它衍生的Java已成為通用編程語言中廣受歡迎的一種。
編輯本段代碼性能
一般認為,使用Java或C#的開發成本比C++低。但是,如果你能夠充分分析C++和這些語言的差別,會發現這句話的成立是有條件的。這個條件就是:軟體規模和復雜度都比較小。如果不超過3萬行有效代碼(不包括生成器產生的代碼),這句話基本上還能成立。否則,隨著代碼量和復雜度的增加,C++的優勢將會越來越明顯。造成這種差別的就是C++的軟體工程性。在Java和C#大談軟體工程的時候,C++實際上已經悄悄地將軟體工程性提升到一個前所未有的高度。這一點被多數人忽視,並且被大公司竭力掩蓋。 語言在軟體工程上的好壞,依賴於語言的抽象能力。從面向過程到面向對象,語言的抽象能力有了一個質的飛躍。但在實踐中,人們發現面向對象無法解決所有軟體工程中的問題。於是,精英們逐步引入、並拓展泛型編程,解決更高層次的軟體工程問題。(實際上,面向對象和泛型編程的起源都可以追溯到1967年,但由於泛型編程更抽象,所以應用遠遠落後於面向對象)。
編輯本段應用實例
哪些程序是用C++寫的: 主流的3種操作系統Windows內核都是用C語言和匯編寫的,上層高級特性是用C++寫的。 《魔獸世界》等幾乎所有的網路游戲,網路搜索引擎,我們所用的大多數軟體都是用C++寫的(硬體也有很多用到C++的)。 以下是一些C++的應用: Amazon:Software for large-scale e-commerce Apple: OS X is written in a mix of language, but a few important parts are C++(當然最核心的部分都是匯編與c語言). AT&T:The largest US telecommunications provider. o provisioning systems o systems for rapid network recovery after failure Autodesk: A large number of major number of application in the CAD domain Ericsson: o server platform. o TDMA-CDMA HLR o GSM-TDMA-CDMA mobility gateway Google: web search engine, etc。 HP: Here is a tiny fraction of HP's C++ apps: o C, C++, Fortran90 compilers, and linker for the new HP IA64 platform (these add to more than 1 million lines of C++ code). IBM: o OS/400. o K42: a high performance, open source, general-purpose operating system kernel for cache-coherent multiprocessors. Intel: o Vtune performace analysis software o compilers and optimizers o lots of chip design and manufacturing software JPL (Jet Propulsion Lab, NASA): Mars rover autonomous driving system (incl. scene analysis and route planning). C++ on Mars! Also lots of supporting software "on the ground" (i.e. Earth). Microsoft: o Windows XP o Windows NT (NT4 and 2000) o Windows 9x (95, 98, Me) o Microsoft Office (Word, Excel, Access, PowerPoint, Outlook) o Internet Explorer (including Outlook Express) o Visual Studio o SQL Mozilla: Firefox browser and Thunderbird mail client (open source) MySQL: MySQL Server (about 250,000 lines of C++) and MySQL Cluster. Arguably the world's most popular open source database Nokia: o Mobile Communications radio-station/internet bridges: FlexiGGSN (Gateway GPRS Support Node) and FlexiSGSN (Server GPRS Support Node). o MSC/HLR Sun: o The HotSpot Java Virtual Machine is written in C++ Symbian OS: rationale: "[...] using C++ for all system code, from the kernel upwards." This is one of the most widespread OS's for cellular phones KDE from linux is written in C++. telephone systems: I think it would be almost easier to list the systems which aren't written in C++ C++寫出的軟體,還包括 VLC, 著名的開源視頻播放器; LAMMPS,著名分子動力學模擬軟體,其中包括一部分Fortran代碼;
編輯本段編程技巧
使用new和delete進行動態內存分配和釋放
運算符new和delete是C++新增的運算符,提供了存儲的動態分配和釋放功能。它的作用相當於C語言的函數malloc()和free(),但是性能更為優越。使用new較之使用malloc()有以下的幾個優點: (1)new自動計算要分配類型的大小,不使用sizeof運算符,比較省事,可以避免錯誤。 (2)自動地返回正確的指針類型,不用進行強制指針類型轉換。 (3)可以用new對分配的對象進行初始化。 使用例子: (1)int* p; p=new int[10]; //分配一個含有10個整數的整形數組 delete[] p; //刪除這個數組 (2)int* p; p=new int (100);//動態分配一個整數並初始化
使用inline內聯函數替代宏調用
對於頻繁使用的函數,C語言建議使用宏調用代替函數調用以加快代碼執行,減少調用開銷。但是宏調用有許多的弊端,可能引起不期望的副作用。例如宏:#define abs(a)(a)<0?(-a):(a)),當使用abs(i++)時,這個宏就會出錯。 所以在C++中應該使用inline內聯函數替代宏調用,這樣既可達到宏調用的目的,又避免了宏調用的弊端。 使用內聯函數只須把inline關鍵字放在函數返回類型的前面。例如: inline int Add(int a,int b);//聲明Add()為內聯函數 這樣編譯器在遇到Add()函數時,就不再進行函數調用,而是直接嵌入函數代碼以加快程序的執行。
使用函數重載
在C語言中,兩個函數的名稱不能相同,否則會導致編譯錯誤。而在C++中,函數名相同而參數數據類型不同的兩個函數被解釋為重載。例如: void PutHz(char* str);//在當前位置輸出漢字 void PutHz(int x,?int y,?char * str);//在x,y處輸入數字 使用函數重載可以幫助程序員處理更多的復雜問題,避免了使用諸如intabs()、fabs()、dabs()等繁雜的函數名稱;同時在大型程序中,使函數名易於管理和使用,而不必絞盡腦汁地去處理函數名。同時必須注意,參數數據類型相同,但是函數返回類型不同的兩個函數不能重載。
用引用(reference)代替指針進行參數傳遞
在C語言中,如果一個函數需要修改用作參數的變數值的時候 ,參數應該聲明為指針類型。例如: void Add(int *a) { (*a)++; } 調用時則使用 Add(&x); //其中x為int或可以轉化為int的類型,如unsigned int, 但這時候編譯器通常會給出warning 對於復雜的程序,使用指針容易出錯,程序也難以讀懂。在C++中,對於上述情況 可以使用引用來代替指針,使程序更加清晰易懂。引用就是對變數取的一個別名,對引用進行操作,這就相當於對原有變數進行操作。例如使用引用的函數定義為: void Add(int& a) { a++;//a為一個整數的引用 } 調用時使用 Add(x);//其中x為int 這個函數與使用指針的上一個函數的功能是一樣的,然而代碼卻更為簡潔和清晰易懂。
使用預設參數
在C++中函數可以使用預設參數,例如: void PutHzxy(char *str,int x=-1, int y=-1) { if(x==-1) x=wherex(); if(y==-1) x=wherex(); moveto(x,y); PutHx(str); } 可以有三種方式調用函數PutHzxy(),例如: PutHzxy("C++語言");//使用預設參數,在當前位置輸出 PutHzxy("C++語言",10,10);//沒有使用預設參數 PutHzxy("C++語言",10);//對y使用預設參數,指定x的位置 通常的情況下,一個函數應該具有盡可能大的靈活性。使用預設參數為程序員處理更大的復雜性和靈活性問題提供了有效的方法,所以在C++的代碼中都大量地使用了預設參數。 需要說明的是,所有的預設參數必須出現在不預設參數的右邊。亦即,一旦開始定義預設參數,就不可再說明非預設的參數。否則當你省略其中一個參數的時候,編譯器無法知道你是自定義了這個參數還是利用了預設參數而定義了非預設的參數。 例如: void PutHzxy(char*str,int x=-1,int y=-1)//正確 void PutHzxy(int x=-1,int y=-1,char*str)//錯誤
使用STL
STL(Standard Template Library,標准模板庫), STL的代碼從廣義上講分為三類:algorithm(演算法)、container(容器)和iterator(迭代器),並包括一些工具類如auto_ptr。幾乎所有的代碼都採用了模板類和模版函數的方式,這相比於傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。 #include<vector>// 包含相關的頭文件/ typedef std::vector<int> intvector;//使用typedef 使代碼看起來更簡潔 int main() { intvector vi; for(int i=0;i<10,i++) vi.push_back(i);//使用push_back添加元素 for(int i=0;i<vi.size();i++) std::cout<<vi[i]<<" ";//[]操作符被重載,使得我們可以像訪問數組一樣訪問vector中的元素 }
編輯本段開發方式
在unix世界有大量的程序員是傳統的非IDE的方式進行軟體開發。一般是如下組合: 1.編譯器:gcc,clang等 2.編輯器:一般是vim/emacs 3.make:gnu make 或者bsd 的pmake等,功能與用法基本一樣 4.版本管理:cvs,svn,git等 5.代碼閱讀:cscope,ctags,lxr等
編輯本段開發環境
1.Visual Studio(Visual C++) 2.Borland C++ Builder 3.Eclipse(Myln + CDT + Mingw32 + GCC) 4.Dev-C++(Mingw32 + GCC) 5.Code::Blocks(可配合多款編譯核心使用) 6.Codelite 7.C-Free 如上所示,目前流行的GNU GCC和微軟的Visual Studio系列各執一套基本的編譯鏈,其他的IDE都是衍生產品
② GHOST是什麼意思/來歷是什麼
ghost英文中是鬼魂的意思~
它是一個非常完善系統備份軟體
使用方法
一、分區備份
使用Ghost進行系統備份,有整個硬碟(Disk)和分區硬碟(Partition)兩種方式。在菜單中點擊 Local(本地)項,在右面彈出的菜單中有3個子項,其中 Disk表示備份整個硬碟(即克隆)、Partition 表示備份硬碟的單個分區、Check 表示檢查硬碟或備份的文件,查看是否可能因分區、硬碟被破壞等造成備份或還原失敗。分區備份作為個人用戶來保存系統數據,特別是在恢復和復制系統分區時具有實用價值。
選 Local→Partition→To Image 菜單,彈出硬碟選擇窗口,開始分區備份操作。點擊該窗口中白色的硬碟信息條,選擇硬碟,進入窗口,選擇要操作的分區(若沒有滑鼠,可用鍵盤進行操作: TAB鍵進行切換,回車鍵進行確認,方向鍵進行選擇)。 在彈出的窗口中選擇備份儲存的目錄路徑並輸入備份文件名稱,注意備份文件的名稱帶有 GHO 的後綴名。 接下來,程序會詢問是否壓縮備份數據,並給出3個選擇:No 表示不壓縮,Fast表示壓縮比例小而執行備份速度較快,High 就是壓縮比例高但執行備份速度相當慢。最後選擇 Yes 按鈕即開始進行分區硬碟的備份。Ghost 備份的速度相當快,不用久等就可以完成,備份的文件以 GHO 後綴名儲存在設定的目錄中。
二、硬碟克隆與備份
硬碟的克隆就是對整個硬碟的備份和還原。選擇菜單Local→Disk→To Disk,在彈出的窗口中選擇源硬碟(第一個硬碟),然後選擇要復制到的目標硬碟(第二個硬碟)。注意,可以設置目標硬碟各個分區的大小,Ghost 可以自動對目標硬碟按設定的分區數值進行分區和格式化。選擇 Yes 開始執行。
Ghost 能將目標硬碟復製得與源硬碟幾乎完全一樣,並實現分區、格式化、復制系統和文件一步完成。只是要注意目標硬碟不能太小,必須能將源硬碟的數據內容裝下。
Ghost 還提供了一項硬碟備份功能,就是將整個硬碟的數據備份成一個文件保存在硬碟上(菜單 Local→Disk→To Image),然後就可以隨時還原到其他硬碟或源硬碟上,這對安裝多個系統很方便。使用方法與分區備份相似。
三、備份還原
如果硬碟中備份的分區數據受到損壞,用一般數據修復方法不能修復,以及系統被破壞後不能啟動,都可以用備份的數據進行完全的復原而無須重新安裝程序或系統。當然,也可以將備份還原到另一個硬碟上。
要恢復備份的分區,就在界面中選擇菜單Local→Partition→From Image,在彈出窗口中選擇還原的備份文件,再選擇還原的硬碟和分區,點擊 Yes 按鈕即可。
四、區域網操作
LPT 是通過並口傳送備份文件,下面有兩個選項:slave 和 master, 分別用以連接主機和客戶機。 網路基本輸入輸出系統 NetBios 和 LPT 相似, 也有 slave 和 master 兩個選項, 作用與 LPT 相同。
先和平時一樣將要 ghost 的分區做成一個 *.gho 文件,再在一台 win98 上安裝Symantec Ghost 企業版,重啟。
1. 首先製作一張 ghost 帶網卡驅動的啟動盤。Start > Programs > Symantec Ghost > Ghost Boot Wizard->Network Boot Disk 如果你的網卡在列表內直接選擇它就可以生成一張帶 PC-DOS 的啟動盤。(但 6.5版的生成的軟盤經常有問題,不能成功啟動)如果你的網卡不在列表內,你要建立專用的 Packet Driver。ADD->Packet Driver (網卡的驅動程序中有)往下根據提示一步一步走,填入工作站的 ip(ghost 一定要 tcp/ip 協議)。最後生成一張軟盤,但此軟盤仍不能使用,要改 autoexec.bat 文件在 net xxxx.dos 後面加一個16進制的地址,如 0X75 等。多台計算機只需改 wattcp.cfg 文件中的 ip 即可:
IP = 192.168.100.44
NETMASK = 255.255.255.0
GATEWAY = 192.168.100.1
2. 在 server 端運行 multicast server 出來的畫面。先給 server一個Session Name(別名)如:bb,再選擇 image file 就是你的 gho 文件。然後 ->Dump From Client->rtitions->More Options-> 在 auto start 的 client 中填入 50(如果你要同時復制50台)->accept client 就算完成了,當你的工作站數達到50台時,server就自動傳送*.gho 文件。
3.詳述:
目前,相當多的電子教室都採用了沒有軟碟機、光碟機的工作站。在沒有軟碟機、光碟機的情況下,當硬碟的軟體系統出現問題時,能否實現網路硬碟克隆呢?PXE (Preboot Execution Environment,它是基於 TCP/IP、DHCP、TFTP 等 Internet 協議之上的擴展網路協議)技術提供的從網路啟動的功能,讓我們找到了解決之道。下面,我們就來講解怎樣採用Ghost 7.0來實現基於 PXE 的網路硬碟克隆。
網路硬碟克隆過程簡述
網路硬碟克隆過程為:在裝有軟碟機的工作站上,用一張引導盤來啟動機器,連接到伺服器,使用 Ghost 多播服務(Multicast Server)將硬碟或分區的映像克隆到工作站,這樣就實現了不拆機、安全、快速的網路硬碟克隆。
實現 PXE 網路啟動方式
對於沒有軟碟機、光碟機的工作站,要實現PXE網路啟動方式,需要完成三個步驟:
1、工作站的PXE啟動設置
PXE網路啟動一般要求在網卡上加裝 PXE 啟動晶元(PXE Boot ROM);對於某些型號的網卡,也可以將 PXE 啟動代碼(Boot Code)寫入主板的 Flash ROM;而一些主板上集成了網卡的品牌機(例如清華同方的商用機),可直接支持PXE啟動。
常用的 RTL8139 晶元的網卡,其 PXE 啟動設置方式是:機器啟動時根據屏幕提示按下Shift+F10,在啟動類型中選擇PXE,開啟網路啟動選項即可。
2、製作 PXE 啟動文件
製作 PXE 的啟動文件,推薦使用 3Com 的 DABS(Dynamic Access Boot Services)。DABS 提供了功能強大的 PXE 啟動服務、管理功能,但是,網上可供下載的是一個30天的試用版。所以,我們只用它的啟動映像文件製作功能,而由 Windows 2000 Server 的 DHCP 伺服器來提供 PXE 啟動服務。
DABS 可以安裝在任何一台運行 Windows 的機器上。安裝後,運行 3Com Boot Image Editor,出現主界面圖。選擇「創建TCP/IP或PXE映像文件(Create a TCP/IP or PXE image file)」,出現對話窗口。為即將建立的映像文件命名,例如:pxeghost.img,其他採用默認選項,將經測試正常的網路啟動盤放入軟碟機,選擇 [OK],創建PXE啟動映像 Pxeghost.img文件。
在 3Com Boot Image Editor 的主菜單中,選擇「創建PXE菜單啟動文件(Creat a PXE menu boot file)」,在出現的窗口中選擇[添加(Add)],加入我們剛剛創建的啟動映像文件Pxeghost.img,在「選項(Options)」標簽中可以設置菜單標題和等待時間。
選擇[保存(Save)],給保存的PXE菜單啟動文件命名為 Pxemenu.pxe。
3、伺服器的PXE啟動服務設置
Windows 2000 Server 的 DHCP 服務支持兩種啟動協議:DHCP 和 BOOTP。我們可以設定以下三種選擇:僅 DHCP、僅 BOOTP、兩者。如果我們的區域網中由其他的 DHCP 伺服器提供動態 IP 地址分配,那麼這里選「僅BOOTP」即可;如果需要這台伺服器提供動態 IP 地址分配,則需要選「兩者」。
接下來,設置啟動文件名。在DHCP伺服器的作用域選項中配置選項「067:啟動文件名」,字串值為我們創建的 PXE 菜單啟動文件名 Pxemenu.pxe。注意:文件名不包含路徑。
DHCP 伺服器只是將啟動文件名通知給 BOOTP 客戶機,客戶機通過什麼方式下載啟動文件呢?答案是,需要 TFTP 服務。3Com 的 DABS 包含了一個 TFTP 服務組件,當然,也可以下載一個免費的 TFTP 伺服器軟體長期使用。
在 TFTP 伺服器的設置中,規定一個服務目錄。將製作的 PXE 啟動文件 Pxeghost.img、Pxemenu.pxe 放到 TFTP 的服務目錄中。TFTP 伺服器設置為自動運行。
用 Ghost 多播克隆硬碟
現在運行 Ghost 多播伺服器,任務名稱為 Restore。設置完畢,按下[接受客戶(Accept Clients)]按鈕。啟動要接受硬碟克隆的無軟碟機工作站,如果以上步驟操作無誤,應該能夠實現 PXE 啟動,加入到多播克隆的任務當中。所有的目標工作站連接到本次任務之後,按下[發送(Send)]按鈕,開始克隆任務。
五、參數設置
在 Options 中可以設置參數。下面簡單介紹一下:
1.image write buffering:在建立備份文件時, 打開寫緩沖;
2.sure:選擇此項後, 不再會出現最終確認詢問 (建議不要選擇此項);
3.no int 13:選擇此項後, 不支持中斷 13 (預設時不選擇);
4.reboot:在對硬碟或者分區操作完成之後, 自動重啟計算機;
5.spanning:通過多個卷架構備份文件 (選擇此項時, 關閉 write buffering);
6.autoname:自動為 spanning 文件命名;
7.allow 64k fat clusters:允許使用 64K FAT 簇 (僅在 Windows NT 中支持);
8.ignore CRC errors:忽略 CRC 錯誤;
9.override size limit:如果出現分區大小不相配, 可忽略執行;
10.image read buffering:打開生成備份文件時的讀緩存 (預設時選中此項)。
六、軟體特性
1.存貯介質
Ghost 支持的存儲介質超出了我們的想像,它支持對等 LPT 介面、對等 USB 介面、對等 TCP/IP 介面、SCSI磁帶機、攜帶型設備(JAZ、ZIP、MO等)、光碟刻錄機(CDR、CDRW)等。而這些特性不需要任何外帶的驅動程序和軟體,只需一張軟盤就可以做到!特別是對光碟刻錄機的支持,如今的刻錄機和空白光碟都十分便宜,非常適合作備份的用途。
2.兼容性
Ghost 對現有的操作系統都有良好的支持,包括 FAT16、FAT32、NTFS、HPFS、UNIX、NOVELL 等文件存儲格式。同以前版本不同的是,Ghost 2001 加入了對 Linux EX2的支持(FIFO 文件存儲格式),這也就意味著 Linux 的用戶也可以用 Ghost 來備份系統了。
3.配套軟體
A.Ghost 瀏覽器
在以前的 Ghost版本中,我們只能對整個系統進行簡單的備份、復制、還原,要恢復單個的文件和文件夾還要使用外帶的 GhostEXP 軟體。現在,Symantec 公司已經將 Ghost 瀏覽器整合在軟體中。Ghost 瀏覽器採用類似於資源管理器的界面,通過它,我們可以方便迅速地在備份包中找出我們想要的文件和文件夾並還原。
使用Explorer可以備份整個硬碟或單個硬碟分區,點擊工具欄上的圓柱形圖標,彈出硬碟或分區選擇對話窗口,然後再選擇備份文件的儲存目錄並輸入名稱即可完成。要注意的是,非注冊用戶不能使用備份這項功能。
在 Ghost Explorer 中管理硬碟備份文件就非常方便了。首先選擇打開一個備份文件(File/Open),這時備份中的文件就像資源管理器一樣在程序界面窗口中列出,可以在其中非常方便地查看、打開文件,也可以查找文件,或者將某個文件刪除(但不能刪除目錄)。
在 Ghost Explorer 中提供了多種還原硬碟備份文件的方法,最方便的方法是使用滑鼠右鍵點擊某個文件,在彈出菜單中選擇 Restore,然後輸入要還原到的目錄,這樣,單個文件就從整個磁碟備份中還原出來了。當然,如果要還原整個磁碟備份,只需選擇左面目錄列表欄中最上面的帶磁碟圖標的目錄項,然後點擊工具欄中的還原圖標 (第二個) 就可以了。
B.GDisk
GDisk 是一個新加入的實用工具,它徹底取代了 FDisk 和 Format,功能有:
* 快速格式化。
* 隱藏和顯示分區。此功能允許一個以上的主 DOS分區,並且每個分區上的操作系統有不同的版本。隱藏分區的能力使計算機習慣於引導到選定的可引導分區,忽略其他隱藏分區中相同操作系統的安裝。
* 全面的分區報告。
* 高度安全的磁碟擦除。提供符合美國國防部標准和更高安全標準的磁碟擦除選項。
與使用互動式菜單的 FDisk 不同,GDisk是由命令行驅動的。這提供了更快的配置磁碟分區和在批處理文件中定義 GDisk操作的能力。但與此同時,幾十個參數會令普通用戶頭疼,因此筆者不推薦一般用戶使用,Symantec 公司也應該推出相應的GUI(圖形用戶界面)控制台以方便用戶使用。具體的參數說明可以用命令行 gdisk/? 了解。
C.Live Update
Live Update 是 Symantec公司軟體的一個通用升級程序,它能夠檢查當前系統中已安裝的 Symantec 軟體,並且通過英特網對軟體進行在線升級。
在安裝 Ghost 2001 時,安裝程序自動升級了 Live Update 程序的版本。
七、命令行參數:(Ghost 的無人 備份/恢復/復制 操作)
其實 Ghost 2001 的功能遠遠不止它主程序中顯示的那些,Ghost 可以在其啟動的命令行中添加眾多參數以實現更多的功能。命令行參數在使用時頗為復雜,不過我們可以製作批處理文件,從而「一勞永逸」(類似於無人安裝 Windows 98 和Windows 2000)。現在讓我們來了解一些常用的參數(了解更加詳細的參數介紹可查看 Ghost 的幫助文件)。
1.-rb
本次 Ghost 操作結束退出時自動重啟。這樣,在復制系統時就可以放心離開了。
2.-fx
本次 Ghost 操作結束退出時自動回到DOS提示符。
3.-sure
對所有要求確認的提示或警告一律回答「Yes」。此參數有一定危險性,只建議高級用戶使用。
4.-fro
如果源分區發現壞簇,則略過提示而強制拷貝。此參數可用於試著挽救硬碟壞道中的數據。
5.@filename
在 filename 中指定 txt 文件。txt文件中為 Ghost 的附加參數,這樣做可以不受DOS命令行 150 個字元的限制。
6.-f32
將源 FAT16 分區拷貝後轉換成 FAT32(前提是目標分區不小於 2G)。WinNT 4 和Windows95、97用戶慎用。
7.-bootcd
當直接向光碟中備份文件時,此選項可以使光碟變成可引導。此過程需要放入啟動盤。
8.-fatlimit
將 NT 的 FAT16 分區限制在 2G。此參數在復制 Windows NT 分區,且不想使用64k/簇的 FAT16 時非常有用。
9.-span
分卷參數。當空間不足時提示復制到另一個分區的另一個備份包。
10.-auto
分卷拷貝時不提示就自動賦予一個文件名繼續執行。
11.-crcignore
忽略備份包中的 CRC ERROR。除非需要搶救備份包中的數據,否則不要使用此參數,以防數據錯誤。
12.-ia
全部映像。Ghost 會對硬碟上所有的分區逐個進行備份。
13.-ial
全部映像,類似於 -ia 參數,對 Linux 分區逐個進行備份。
14.-id
全部映像。類似於 -ia 參數,但包含分區的引導信息。
15.-quiet
操作過程中禁止狀態更新和用戶干預。
16.-script
可以執行多個 Ghost 命令行。命令行存放在指定的文件中。
17.-split=x
將備份包劃分成多個分卷,每個分卷的大小為 x兆。這個功能非常實用,用於大型備份包復制到移動式存儲設備上,例如將一個 1.9G 的備份包復制到 3 張刻錄盤上。
18.-z
將磁碟或分區上的內容保存到映像文件時進行壓縮。-z 或 -z1 為低壓縮率(快速);-z2 為高壓縮率(中速);-z3 至 -z9 壓縮率依次增大(速度依次減慢)。
19.-clone
這是實現 Ghost 無人備份/恢復的核心參數。使用語法為:
-clone,MODE=(operation),SRC=(source),DST=(destination),[SZE(size),SZE(size)...]
此參數行較為復雜,且各參數之間不能含有空格。其中 operation意為操作類型,值可取::磁碟到磁碟;load:文件到磁碟;mp:磁碟到文件;p:分區到分區;pload:文件到分區;pmp:分區到文件。
Source 意為操作源,值可取:驅動器號,從1開始;或者為文件名,需要寫絕對路徑。
Destination 意為目標位置,值可取:驅動器號,從 1開始;或者為文件名,需要寫絕對路徑;@CDx,刻錄機,x 表示刻錄機的驅動器號,從1開始。
下面舉例說明:
1.命令行參數:ghostpe.exe -clone,mode=,src=1,dst=2
完成操作:將本地磁碟1復制到本地磁碟2。
2.命令行參數:ghostpe.exe -clone,mode=p,src=1:2,dst=2:1
完成操作:將本地磁碟1上的第二分區復制到本地磁碟2的第一分區。
3.命令行參數:ghostpe.exe-clone,mode=load,src=g:\3prtdisk.gho,dst=1,sze1=450M,sze2=1599M,sze3=2047M
完成操作:從映像文件裝載磁碟1,並將第一個分區的大小調整為450MB,第二個調整為1599MB,第三個調整為2047MB。
4.命令行參數:ghostpe.exe -clone,mode=pmp,src2:1:4:6,dst=d:\prt246.gho
完成操作:創建僅含有選定分區的映像文件。從磁碟2上選擇分區1、4、6。
八、一些示例
ghost.exe -clone,mode=,src=1,dst=2 -sure
硬碟對拷
ghost.exe -clone,mode=p,src=1:2,dst=2:1 -sure
將一號硬碟的第二個分區復制到二號硬碟的第一個分區
ghost.exe -clone,mode=pmp,src=1:2,dst=g:\bac.gho
將一號硬碟的第二個分區做成映像文件放到 g 分區中
ghost.exe -clone,mode=pload,src=g:\bac.gho:2,dst=1:2
從內部存有兩個分區的映像文件中,把第二個分區還原到硬碟的第二個分區
ghost.exe -clone,mode=pload,src=g:\bac.gho,dst=1:1 -fx -sure -rb
用 g 盤的 bac.gho 文件還原 c 盤。完成後不顯示任何信息,直接啟動
ghost.exe -clone,mode=load,src=g:\bac.gho,dst=2,SZE1=60P,SZE2=40P
將映像文件還原到第二個硬碟,並將分區大小比例修改成 60:40
自動還原磁碟:
首先做一個啟動盤,包含 Config.sys, Autoexec.bat, Command.com, Io.sys, Ghost.exe 文件(可以用 windows 做啟動盤的程序完成)。Autoexec.bat 包含以下命令:
Ghost.exe -clone,mode=pload,src=d:\bac.gho,dst=1:1 -fx -sure -rb
利用在 D 盤的文件自動還原,結束以後自動退出 ghost 並且重新啟動。
自動備份磁碟:
ghost.exe -clone,mode=pmp,src=1:1,dst=d:\bac.gho -fx -sure -rb
自動還原光碟:
包含文件:Config.sys, Autoexec.bat, Mscdex.exe (CDROM 執行程序), Oakcdrom.sys (ATAPI CDROM 兼容驅動程序), Ghost.exe。
Config.sys 內容為:
DEVICE=OAKCDROM.SYS /D:IDECD001
Autoexec.bat 內容為:
MSCDEX.EXE /D:IDECE001 /L:Z
Ghost -clone,mode=load,src=z:\bac.gho,dst=1:1 -sure -rb
可以根據下面的具體說明修改示例:
1.-clone
-clone 在使用時必須加入參數,它同時也是所有的 switch{batch switch} 里最實用的。下面是 clone 所定義的參數:
mode={|load|mp|p|pload|pmp},
src={drive|file|driveartition},
dst={drive|file|driveartition}
mode 指定要使用哪種 clone 所提供的命令
硬碟到硬碟的復制 (disk to disk )
load 文件還原到硬碟 (file to disk load)
mp 將硬碟做成映像文件 (disk to file mp)
p 分區到分區的復制 (partition to partition )
pload 文件還原到分區 (file to partition load)
pmp 分區備份成映像文件(partition to file mp)
src 指定了 ghost 運行時使用的源分區的位置模式及其意義。對應 mode 命令 src 所使用參數例子:
COPY/DUMP 源硬碟號。以 1 代表第一號硬碟
LOAD 映像文件名。g:/back98/setup98.gho 或裝置名稱 (drive)
PCOPY/PDUMP 源分區號。1:2 代表的是硬碟1的第二個分區
PLOAD 分區映像文件名加上分區號或是驅動器名加上分區號。g:\back98.gho:2 代表映像文件里的第二個分區
dst 指定運行 Ghost 時使用的目標位置模式及其意義。對應 mode 命令 dst 所使用參數例子:
COPY/DUMP 目的硬碟號。2 代表第二號硬碟
LOAD 硬碟映像文件名。例 g:\back98\setup98.gho
PCOPY/PLOAD 目的分區號。2:2 代表硬碟 2 的第二個分區
PDUMP 分區映像文件名加分區號。g:\back98\setup98.gho:2
SZEn 指定所使用目的分區的大小:
n=xxxxM 指定第 n 目的分區的大小為 xxxxMB。如 SZE2=800M 表示分區 2 的大小為 800MB
n=mmP 指定第 n 目的分區的大小為整個硬碟的 mm 個百分比。
2.-fxo 當源物件出現壞塊時,強迫復制繼續進行
3.-fx 當ghost完成新系統的工作後不顯示 press ctrl-alt-del to reboot 直接回到DOS下
4.-ia 完全執行扇區到扇區的復制。當由一個映像文件或由另一個硬碟為來源,復制一個分區時,Ghost將首先檢查來源分區,再決定是要復制文件和目錄結構還是要做映像復制(扇區到扇區)。預設是這種形式。但是有的時候,硬碟里特定的位置可能會放一些隱藏的與系統安全有關的文件。只有用扇區到扇區復制的方法才能正確復制
5.-pwd and -pwd=x 給映像文件加密
6.-rb 在還原或復制完成以後,讓系統重新啟動
7.-sure 可以和 clone 合用。Ghost 不會顯示 proceed with disk clone-destination drive will be overwritten? 提示信息
九、注意事項
1.在備份系統時,單個的備份文件最好不要超過 2GB。
2.在備份系統前,最好將一些無用的文件刪除以減少Ghost文件的體積。通常無用的文件有:Windows 的臨時文件夾、IE 臨時文件夾、Windows 的內存交換文件。這些文件通常要佔去100 多兆硬碟空間。
3.在備份系統前,整理目標盤和源盤,以加快備份速度。
4.在備份系統前及恢復系統前,最好檢查一下目標盤和源盤,糾正磁碟錯誤。
5.在恢復系統時,最好先檢查一下要恢復的目標盤是否有重要的文件還未轉移,千萬不要等硬碟信息被覆蓋後才後悔莫及啊。
6.在選擇壓縮率時,建議不要選擇最高壓縮率,因為最高壓縮率非常耗時,而壓縮率又沒有明顯的提高。
7.在新安裝了軟體和硬體後,最好重新製作映像文件,否則很可能在恢復後出現一些莫名其妙的錯誤。
③ c++的編程技巧
運算符new和delete提供了存儲的動態內存分配和釋放功能,它的作用相當於C語言的函數malloc()和free(),但性能更為優越。使用new較之使用malloc()有以下的幾個優點:
(1)new自動計算要分配類型的大小,不使用sizeof運算符,比較省事,可以避免錯誤。
(2)自動地返回正確的指針類型,不用進行強制指針類型轉換。
(3)可以用new對分配的對象進行初始化。 對於頻繁使用的函數,C語言建議使用宏調用代替函數調用以加快代碼執行,減少調用開銷。但是宏調用有許多的弊端,可能引起不期望的副作用。例如宏:#define abs(a)(a)<0?(-a):(a)),當使用abs(i++)時,這個宏就會出錯。
所以在C++中應該使用inline內聯函數替代宏調用,這樣既可達到宏調用的目的,又避免了宏調用的弊端。
使用內聯函數只須把inline關鍵字放在函數返回類型的前面。 在C語言中,兩個函數的名稱不能相同,否則會導致編譯錯誤。而在C++中,函數名相同而參數數據類型不同或參數個數不同或二者皆不同的兩個函數被解釋為重載。
使用函數重載可以幫助程序員處理更多的復雜問題,避免了使用諸如intabs()、fabs()、dabs()等繁雜的函數名稱;同時在大型程序中,使函數名易於管理和使用,而不必絞盡腦汁地去處理函數名。同時必須注意,參數數據類型相同,但是函數返回類型不同的兩個函數不能重載。 在C++中函數可以使用預設參數。
通常的情況下,一個函數應該具有盡可能大的靈活性。使用預設參數為程序員處理更大的復雜性和靈活性問題提供了有效的方法,所以在C++的代碼中都大量地使用了預設參數。
需要說明的是,所有的預設參數必須出現在不預設參數的右邊。亦即,一旦開始定義預設參數,就不可再聲明非預設的參數。否則當你省略其中一個參數的時候,編譯器無法知道你是自定義了這個參數還是利用了預設參數而定義了非預設的參數。 STL(Standard Template Library,標准模板庫),STL的代碼從廣義上講分為三類:algorithm(演算法)、container(容器)和iterator(迭代器),並包括一些工具類如auto_ptr。幾乎所有的代碼都採用了模板類和模板函數的方式,這相比於傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。
作用符被重載,使得我們可以像訪問數組一樣訪問vector中的元素。 模板的概念
模板是C++的一個特性,是函數和類可以作用於不同的類型上而不需要針對每一個具體類型重復相同的代碼。與模板相反,我們已經學過的重載(Overloading),對重載函數而言,C++的檢查機制能通過函數參數的不同及所屬類的不同。正確的調用重載函數。例如,為求兩個數的最大值,我們定義MAX()函數需要對不同的數據類型分別定義不同重載(Overload)版本。如果使用模板就可以只寫一個通用的MAX模板,而不需要針對每個類型重復相同的邏輯。
指針與引用的區別
指針與引用看上去完全不同(指針用操作符「*」和「->」,引用使用操作符「&」),但是它們似乎有相同的功能。指針與引用都是讓你間接引用其他對象。你如何決定在什麼時候使用指針,在什麼時候使用引用呢?
首先,要認識到在任何情況下都不能使用指向空值的引用。一個引用必須總是指向某些對象。因此如果你使用一個變數並讓它指向一個對象,但是該變數在某些時候也可能不指向任何對象,這時你應該把變數聲明為指針,因為這樣你可以賦空值給該變數。相反,如果變數肯定指向一個對象,例如你的設計不允許變數為空,這時你就可以把變數聲明為引用。
④ 什麼是C++
C++這個詞在中國大陸的程序員圈子中通常被讀做「C加加」,而西方的程序員通常讀做「C plus plus」,「CPP」。 它是一種使用非常廣泛的計算機編程語言。C++是一種靜態數據類型檢查的、支持多重編程範式的通用程序設計語言。它支持過程化程序設計、數據抽象、面向對象程序設計、泛型程序設計等多種程序設計風格。
在C基礎上,一九八三年又由貝爾實驗室的Bjarne Strou-strup推出了C++。 C++進一步擴充和完善了C語言,成為一種面向 對象的程序設計語言。C++目前流行的編譯器最新版本是Borland C++4.5,Symantec C++6.1,和Microsoft VisualC++ 2012。C++提出了一些更為深入的概念,它所支持的這些面向對象的概念容易將問題空間直接地映射到程序空間,為程序員提供了一種與傳統結構程序設計不同的思維方式和編程方法。因而也增加了整個語言的復雜性,掌握起來有一定難度。
C++由美國AT&T貝爾實驗室的本賈尼·斯特勞斯特盧普博士在20世紀80年代初期發明並實現(最初這種語言被稱作「C with Classes」帶類的C)。開始,C++是作為C語言的增強版出現的,從給C語言增加類開始,不斷的增加新特性。虛函數(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、命名空間[1](name space)逐漸被加入標准。[2]
1998年國際標准組織(international standard organization, ISO)頒布了C++程序設計語言的國[3]際標准ISO/IEC 1988-1998。C++是具有國際標準的編程語言,通常稱作ANSI/ISOC++。[4]
1998年是C++標准委員會成立的第一年,以後每5年視實際需要更新一次標准。C++0x最終國際投票已於2011年8月10日結束,並且所有國家都投出了贊成票,C++0x已經毫無疑義地成為正式國際標准。先前被臨時命名為C++0x的新標准將被稱為C++ 2011。C++ 2011將取代現行的C++標准ISO/IEC 14882,它公開於1998年並於2003年更新,通稱C++98以及C++03。國際標准化組織於2011年9月1日出版發布ISO/IEC 14882:2011,名稱是:Information technology -- Programming languages -- C++ Edition: 3。
計算機誕生初期, 人們要使用計算機必須用機器語言或匯編語言編寫程序。世界上第一種計算機高級語言誕生於1954年, 它是FORTRAN語言。 先後出現了多種計算機高級語言。 其中使用最廣泛、影響最大的當推BASIC語言和C語言。
BASIC語言是1964年在FORTRAN語言的基礎上簡化而成的, 它是為初學者設計的小型高級語言。
C語言是1972年由美國貝爾實驗室的D.M.Ritchie研製成功的。 它不是為初學者設計的,而是為計算機專業人員設計的。 大多數系統軟體和許多應用軟體都是用C語言編寫的。
但是隨著軟體規模的增大, 用C語言編寫程序漸漸顯得有些吃力了。
C++是由AT&T Bell(貝爾)實驗室的Bjarne Stroustrup博士及其同事於20世紀80年代初在C語言的基礎上開發成功的。 C++保留了C語言原有的所有優點, 增加了面向對象的機制。
C++是由C發展而來的, 與C兼容。 用C語言寫的程序基本上可以不加修改地用於C++。 從C++的名字可以看出它是C的超越和集中。 C++既可用於面向過程的結構化程序設計, 又可用於面向對象的程序設計, 是一種功能強大的混合型的程序設計語言。
C++對C的「增強」,表現在六個方面:
(1) 類型檢查更為嚴格。
(2) 增加了面向對象的機制。
(3)增加了泛型編程的機制(template)
(4)增加了異常處理
(5)增加了運算符重載
(6)增加了標准模板庫(STL)
面向對象程序設計,是針對開發較大規模的程序而提出來的,目的是提高軟體開發的效率。不要把面向對象和面向過程對立起來, 面向對象和面向過程不是矛盾的,而是各有用途、互為補充的。
學習C++, 既要會利用C++進行面向過程的結構化程序設計, 也要會利用C++進行面向對象的程序設計,更要會利用模板進行泛型編程。
C和C++關系
但是,C是C++的基礎,C++語言和C語言在很多方面是兼容的。因此,掌握了C語言,再進一步學習C++就能以一種熟悉的語法來學習面向對象的語言,從而達到事半功倍的目的。
C timeline
1978 k&R C---->1988 ANSI C-->1995 ISO C
學習C語言最經典的還是The C Programming Language
發展歷史
C++語言發展大概可以分為三個階段:
第一階段
從80年代到1995年。這一階段C++語言基本上是傳統類型上的面向對象語言,並且憑借著接近C語言的效率,在工業界使用的開發語言中占據了相當大份額;
第二階段
從1995年到2000年,這一階段由於標准模板庫(STL)和後來的Boost等程序庫的出現,泛型程序設計在C++中占據了越來越多的比重性。當然,同時由於Java、C#等語言的出現和硬體價格的大規模下降,C++受到了一定的沖擊;
第三階段
從2000年至今,由於以Loki、MPL等程序庫為代表的產生式編程和模板元編程的出現,C++出現了發展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程序設計語言中最復雜的一員。[7]
優點
C++代碼
· C++設計成靜態類型、和C同樣高效且可移植的多用途程序設計語言。
· C++設計成直接的和廣泛的支持多種程序設計風格(程序化程序設計、資料抽象化、面向對象程序設計、泛型程序設計)。
· C++設計成給程序設計者更多的選擇,即使可能導致程序設計者選擇錯誤。
· C++設計成盡可能與C兼容,藉此提供一個從C到C++的平滑過渡。
· C++避免平台限定或沒有普遍用途的特性。
· C++不使用會帶來額外開銷的特性。
· C++設計成無需復雜的程序設計環境。[8]
出於保證語言的簡潔和運行高效等方面的考慮,C++的很多特性都是以庫(如STL)或其他的形式提供的,而沒有直接添加到語言本身里。關於此類話題,Bjarne Stroustrup的《C++語言的設計和演化》(1994)里做了詳盡的陳述。
C++在一定程度上可以和C語言很好的結合,甚至目前大多數C語言程序是在C++的集成開發環境中完成的。C++相對眾多的面向對象的語言,具有相當高的性能。
C++引入了面向對象的概念,使得開發人機交互類型的應用程序更為簡單、快捷。很多優秀的程序框架包括MFC、QT、wxWidgets就是使用的C++。[9]
代碼性能
人們一般認為,使用Java或C#的開發成本比C++低。但是,如果充分分析C++和這些語言的差別,會發現這句話的成立是有條件的。這個條件就是:軟體規模和復雜度都比較小。如果不超過3萬行有效代碼(不包括生成器產生的代碼),這句話基本上還能成立。否則,隨著代碼量和復雜度的增加,C++的優勢將會越來越明顯。造成這種差別的就是C++的軟體工程性。[9]
缺點
C++由於語言本身過度復雜,這甚至使人類難於理解其語義。更為糟糕的是C++的編譯系統受到C++的復雜性的影響,非常難於編寫,即使能夠使用的編譯器也存在了大量的問題,這些問題大多難於被發現。[9]
由於本身的復雜性,復雜的C++程序的正確性相當難於保證。也有人提出不支持多線程的原語等缺陷。不過有如此多的知名人士提出了如此多的缺陷,正說明C++被廣泛使用和成功。
c++語言由於過度的復雜性,以及與unix的文化相抵觸,在unix/linux領域受到很多著名人士(比如Linux之父linus torvalds與著名黑客Eric S. Raymond)的強烈批評與抵制。
C++基本數據類型和表達式
數據是程序處理的對象,數據可以依其本身的特點進行分類。我們知道在數學中有整數、實數概念,在日常生活中需要用字元串來表示人的姓名和地址,有些問題的回答只能是「是」或「否」(即邏輯「真」或「假」)。不同類型的數據有不同的處理方法,例如:整數和實數可以參加算術運算,但實數的表示又不同於整數,要保留一定的小數位;字元串可以拼接;邏輯數據可以參加「與」、「或」、「非」等邏輯運算。
我們編寫計算機程序,目的就是為了解決客觀世界中的現實問題。所以,高級語言中也為我們提供了豐富的數據類型和運算。C++中的數據類型分為基本類型和自定義類型。基本類型是C++編譯系統內置的。
基本數據類型
C++的基本數據類型如下表所示(表中各類型的長度和取值范圍,以面向IA-32處理器的VC++ 2008和gcc 4.2為標准)。
類型名 長度(位元組) 取值范圍
bool 1 false,true
char
1 -128~127
signed char 1 -128~127
unsigned char 1 0~255
short(signed short) 2 -32768~32767
unsigned short 2 0~65535
int(signed int) 4 -2147483648~2147483647
unsigned int 4 0~4294967295
long(signed long) 4 -2147483648~2147483647
unsigned long 4 0~4294967295
float 4 3.4X10^(-38)~3.4X10^(38)
double 8 1.7X10^(-308)~1.7X10^(308)
long double 8 1.7X10^(-308)~1.7X10^(308)
編輯本段編程技巧
new和delete
運算符new和delete提供了存儲的動態內存分配和釋放功能,它的作用相當於C語言的函數malloc()和free(),但是性能更為優越。使用new較之使用malloc()有以下的幾個優點:
(1)new自動計算要分配類型的大小,不使用sizeof運算符,比較省事,可以避免錯誤。
(2)自動地返回正確的指針類型,不用進行強制指針類型轉換。
(3)可以用new對分配的對象進行初始化。[11]
inline
對於頻繁使用的函數,C語言建議使用宏調用代替函數調用以加快代碼執行,減少調用開銷。但是宏調用有許多的弊端,可能引起不期望的副作用。例如宏:#define abs(a)(a)<0?(-a):(a)),當使用abs(i++)時,這個宏就會出錯。
所以在C++中應該使用inline內聯函數替代宏調用,這樣既可達到宏調用的目的,又避免了宏調用的弊端。
使用內聯函數只須把inline關鍵字放在函數返回類型的前面。[11]
函數重載
在C語言中,兩個函數的名稱不能相同,否則會導致編譯錯誤。而在C++中,函數名相同而參數數據類型不同或參數個數不同或二者皆不同的兩個函數被解釋為重載。
使用函數重載可以幫助程序員處理更多的復雜問題,避免了使用諸如intabs()、fabs()、dabs()等繁雜的函數名稱;同時在大型程序中,使函數名易於管理和使用,而不必絞盡腦汁地去處理函數名。同時必須注意,參數數據類型相同,但是函數返回類型不同的兩個函數不能重載。[11]
參數傳遞
在C語言中,如果一個函數需要修改用作參數的變數值的時候 ,參數應該聲明為指針類型;當參數的大小超過一個機器字長時,通過傳值方式來傳遞參數的效率較低,也需要用指針。由於C語言的指針可以進行p++,--p,p+=1等算術運算,所以編譯器無法在編譯的時候確定指針引用的變數。對於復雜的程序,使用指針容易出錯,程序也難以讀懂。在C++中,對於上述情況 可以使用引用來代替指針,使程序更加清晰易懂。引用就是對變數取的一個別名,對引用進行操作,這就相當於對原有變數進行操作。[11]
預設參數
在C++中函數可以使用預設參數。
通常的情況下,一個函數應該具有盡可能大的靈活性。使用預設參數為程序員處理更大的復雜性和靈活性問題提供了有效的方法,所以在C++的代碼中都大量地使用了預設參數。
需要說明的是,所有的預設參數必須出現在不預設參數的右邊。亦即,一旦開始定義預設參數,就不可再說明非預設的參數。否則當你省略其中一個參數的時候,編譯器無法知道你是自定義了這個參數還是利用了預設參數而定義了非預設的參數。[11]
使用STL
STL(Standard Template Library,標准模板庫), STL的代碼從廣義上講分為三類:algorithm(演算法)、container(容器)和iterator(迭代器),並包括一些工具類如auto_ptr。幾乎所有的代碼都採用了模板類和模板函數的方式,這相比於傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。
作用符被重載,使得我們可以像訪問數組一樣訪問vector中的元素。[11]
使用模板
.模板的概念。
模板是C++的一個特性,是函數和類可以作用於不同的類型上而不需要針對每一個具體類型重復相同的代碼。與模板相反,我們已經學過的重載(Overloading),對重載函數而言,C++的檢查機制能通過函數參數的不同及所屬類的不同。正確的調用重載函數。例如,為求兩個數的最大值,我們定義MAX()函數需要對不同的數據類型分別定義不同重載(Overload)版本。如果使用模板就可以只寫一個通用的MAX模板,而不需要針對每個類型重復相同的邏輯。
指針與引用的區別
指針與引用看上去完全不同(指針用操作符「*」和「->」,引用使用操作符「&」),但是它們似乎有相同的功能。指針與引用都是讓你間接引用其他對象。你如何決定在什麼時候使用指針,在什麼時候使用引用呢?
首先,要認識到在任何情況下都不能使用指向空值的引用。一個引用必須總是指向某些對象。因此如果你使用一個變數並讓它指向一個對象,但是該變數在某些時候也可能不指向任何對象,這時你應該把變數聲明為指針,因為這樣你可以賦空值給該變數。相反,如果變數肯定指向一個對象,例如你的設計不允許變數為空,這時你就可以把變數聲明為引用。[12]
⑤ 哭求:fortran語言矩陣求逆的程序
這是一段f90的代碼,使用是時候要加上use inv_mat,然後就可以求某方陣的逆矩陣了。
mole inv_mat
! Description : 計算逆矩陣
contains
subroutine inv(A,invA,N)
! Purpose : 計算逆矩陣
!-----------------------------------------------------
! Input parameters :
! 1. A: 需要求逆的矩陣
! 2. N: 矩陣的維度
! Output parameters :
! 1. invA: A的逆矩陣
implicit real*8(a-z)
integer::n
integer::i
real*8::A(n,n),invA(n,n),E(n,n)
E=0
!設置E為單位矩陣
do i=1,n
E(i,i)=1
end do
call mateq(A,E,invA,N,N)
end subroutine inv
subroutine mateq(A,B,X,N,M)
! Purpose : 高斯列主元消去法計算矩陣方程
! AX=B
implicit real*8(a-z)
integer::N,M,i
real*8::A(N,N),B(N,M),X(N,M)
real*8::btemp(N),xtemp(N)
do i=1,M
btemp=B(:,i)
call elgauss(A,btemp,xtemp,N)
X(:,i)=xtemp
end do
end subroutine mateq
subroutine elgauss(A,b,x,N)
! Purpose : 高斯列主元消去法
! Ax=b
implicit real*8(a-z)
integer::i,k,N
integer::id_max !主元素標號
real*8::A(N,N),b(N),x(N)
real*8::Aup(N,N),bup(N)
!Ab為增廣矩陣 [Ab]
real*8::Ab(N,N+1)
real*8::vtemp1(N+1),vtemp2(N+1)
Ab(1:N,1:N)=A
Ab(:,N+1)=b
do k=1,N-1
elmax=dabs(Ab(k,k))
id_max=k
do i=k+1,n
if (dabs(Ab(i,k))>elmax) then
elmax=Ab(i,k)
id_max=i
end if
end do
vtemp1=Ab(k,:)
vtemp2=Ab(id_max,:)
Ab(k,:)=vtemp2
Ab(id_max,:)=vtemp1
!#########################################################
do i=k+1,N
temp=Ab(i,k)/Ab(k,k)
Ab(i,:)=Ab(i,:)-temp*Ab(k,:)
end do
end do
Aup(:,:)=Ab(1:N,1:N)
bup(:)=Ab(:,N+1)
call uptri(Aup,bup,x,n)
end subroutine elgauss
subroutine uptri(A,b,x,N)
! Purpose : 上三角方程組的回帶方法
! Ax=b
implicit real*8(a-z)
integer::i,j,N
real*8::A(N,N),b(N),x(N)
x(N)=b(N)/A(N,N)
!回帶部分
do i=n-1,1,-1
x(i)=b(i)
do j=i+1,N
x(i)=x(i)-a(i,j)*x(j)
end do
x(i)=x(i)/A(i,i)
end do
end subroutine uptri
end mole inv_mat
⑥ 誰能教我用GUOST
Ghost 使用詳解
--------------------------------------------------------------------------------
一、分區備份
使用Ghost進行系統備份,有整個硬碟(Disk)和分區硬碟(Partition)兩種方式。在菜單中點擊 Local(本地)項,在右面彈出的菜單中有3個子項,其中 Disk表示備份整個硬碟(即克隆)、Partition 表示備份硬碟的單個分區、Check 表示檢查硬碟或備份的文件,查看是否可能因分區、硬碟被破壞等造成備份或還原失敗。分區備份作為個人用戶來保存系統數據,特別是在恢復和復制系統分區時具有實用價值。
選 Local→Partition→To Image 菜單,彈出硬碟選擇窗口,開始分區備份操作。點擊該窗口中白色的硬碟信息條,選擇硬碟,進入窗口,選擇要操作的分區(若沒有滑鼠,可用鍵盤進行操作:TAB鍵進行切換,回車鍵進行確認,方向鍵進行選擇)。 在彈出的窗口中選擇備份儲存的目錄路徑並輸入備份文件名稱,注意備份文件的名稱帶有 GHO 的後綴名。 接下來,程序會詢問是否壓縮備份數據,並給出3個選擇:No 表示不壓縮,Fast表示壓縮比例小而執行備份速度較快,High 就是壓縮比例高但執行備份速度相當慢。最後選擇 Yes 按鈕即開始進行分區硬碟的備份。Ghost 備份的速度相當快,不用久等就可以完成,備份的文件以 GHO 後綴名儲存在設定的目錄中。
二、硬碟克隆與備份
硬碟的克隆就是對整個硬碟的備份和還原。選擇菜單Local→Disk→To Disk,在彈出的窗口中選擇源硬碟(第一個硬碟),然後選擇要復制到的目標硬碟(第二個硬碟)。注意,可以設置目標硬碟各個分區的大小,Ghost 可以自動對目標硬碟按設定的分區數值進行分區和格式化。選擇 Yes 開始執行。
Ghost 能將目標硬碟復製得與源硬碟幾乎完全一樣,並實現分區、格式化、復制系統和文件一步完成。只是要注意目標硬碟不能太小,必須能將源硬碟的數據內容裝下。
Ghost 還提供了一項硬碟備份功能,就是將整個硬碟的數據備份成一個文件保存在硬碟上(菜單 Local→Disk→To Image),然後就可以隨時還原到其他硬碟或源硬碟上,這對安裝多個系統很方便。使用方法與分區備份相似。
三、備份還原
如果硬碟中備份的分區數據受到損壞,用一般數據修復方法不能修復,以及系統被破壞後不能啟動,都可以用備份的數據進行完全的復原而無須重新安裝程序或系統。當然,也可以將備份還原到另一個硬碟上。
要恢復備份的分區,就在界面中選擇菜單Local→Partition→From Image,在彈出窗口中選擇還原的備份文件,再選擇還原的硬碟和分區,點擊 Yes 按鈕即可。
四、區域網操作
LPT 是通過並口傳送備份文件,下面有兩個選項:slave 和 master, 分別用以連接主機和客戶機。 網路基本輸入輸出系統 NetBios 和 LPT 相似, 也有 slave 和 master 兩個選項, 作用與 LPT 相同。
先和平時一樣將要 ghost 的分區做成一個 *.gho 文件,再在一台 win98 上安裝Symantec Ghost 企業版,重啟。
1. 首先製作一張 ghost 帶網卡驅動的啟動盤。Start > Programs > Symantec Ghost > Ghost Boot Wizard->Network Boot Disk 如果你的網卡在列表內直接選擇它就可以生成一張帶 PC-DOS 的啟動盤。(但 6.5版的生成的軟盤經常有問題,不能成功啟動)如果你的網卡不在列表內,你要建立專用的 Packet Driver。ADD->Packet Driver (網卡的驅動程序中有)往下根據提示一步一步走,填入工作站的 ip(ghost 一定要 tcp/ip 協議)。最後生成一張軟盤,但此軟盤仍不能使用,要改 autoexec.bat 文件在 net xxxx.dos 後面加一個16進制的地址,如 0X75 等。多台計算機只需改 wattcp.cfg 文件中的 ip 即可:
IP = 192.168.100.44
NETMASK = 255.255.255.0
GATEWAY = 192.168.100.1
2. 在 server 端運行 multicast server 出來的畫面。先給 server一個Session Name(別名)如:bb,再選擇 image file 就是你的 gho 文件。然後 ->Dump From Client->rtitions->More Options-> 在 auto start 的 client 中填入 50(如果你要同時復制50台)->accept client 就算完成了,當你的工作站數達到50台時,server就自動傳送*.gho 文件。
3.詳述:
目前,相當多的電子教室都採用了沒有軟碟機、光碟機的工作站。在沒有軟碟機、光碟機的情況下,當硬碟的軟體系統出現問題時,能否實現網路硬碟克隆呢?PXE(Preboot Execution Environment,它是基於 TCP/IP、DHCP、TFTP 等 Internet 協議之上的擴展網路協議)技術提供的從網路啟動的功能,讓我們找到了解決之道。下面,我們就來講解怎樣採用Ghost 7.0來實現基於 PXE 的網路硬碟克隆。
網路硬碟克隆過程簡述
網路硬碟克隆過程為:在裝有軟碟機的工作站上,用一張引導盤來啟動機器,連接到伺服器,使用 Ghost 多播服務(Multicast Server)將硬碟或分區的映像克隆到工作站,這樣就實現了不拆機、安全、快速的網路硬碟克隆。
實現 PXE 網路啟動方式
對於沒有軟碟機、光碟機的工作站,要實現PXE網路啟動方式,需要完成三個步驟:
1、工作站的PXE啟動設置
PXE網路啟動一般要求在網卡上加裝 PXE 啟動晶元(PXE Boot ROM);對於某些型號的網卡,也可以將 PXE 啟動代碼(Boot Code)寫入主板的 Flash ROM;而一些主板上集成了網卡的品牌機(例如清華同方的商用機),可直接支持PXE啟動。
常用的 RTL8139 晶元的網卡,其 PXE 啟動設置方式是:機器啟動時根據屏幕提示按下Shift+F10,在啟動類型中選擇PXE,開啟網路啟動選項即可。
2、製作 PXE 啟動文件
製作 PXE 的啟動文件,推薦使用 3Com 的 DABS(Dynamic Access Boot Services)。DABS 提供了功能強大的 PXE 啟動服務、管理功能,但是,網上可供下載的是一個30天的試用版。所以,我們只用它的啟動映像文件製作功能,而由 Windows 2000 Server 的 DHCP 伺服器來提供 PXE 啟動服務。
DABS 可以安裝在任何一台運行 Windows 的機器上。安裝後,運行 3Com Boot Image Editor,出現主界面圖。選擇「創建TCP/IP或PXE映像文件(Create a TCP/IP or PXE image file)」,出現對話窗口。為即將建立的映像文件命名,例如:pxeghost.img,其他採用默認選項,將經測試正常的網路啟動盤放入軟碟機,選擇[OK],創建PXE啟動映像 Pxeghost.img文件。
在 3Com Boot Image Editor 的主菜單中,選擇「創建PXE菜單啟動文件(Creat a PXE menu boot file)」,在出現的窗口中選擇[添加(Add)],加入我們剛剛創建的啟動映像文件Pxeghost.img,在「選項(Options)」標簽中可以設置菜單標題和等待時間。
選擇[保存(Save)],給保存的PXE菜單啟動文件命名為 Pxemenu.pxe。
3、伺服器的PXE啟動服務設置
Windows 2000 Server 的 DHCP 服務支持兩種啟動協議:DHCP 和 BOOTP。我們可以設定以下三種選擇:僅 DHCP、僅 BOOTP、兩者。如果我們的區域網中由其他的 DHCP 伺服器提供動態 IP 地址分配,那麼這里選「僅BOOTP」即可;如果需要這台伺服器提供動態 IP 地址分配,則需要選「兩者」。
接下來,設置啟動文件名。在DHCP伺服器的作用域選項中配置選項「067:啟動文件名」,字串值為我們創建的 PXE 菜單啟動文件名 Pxemenu.pxe。注意:文件名不包含路徑。
DHCP 伺服器只是將啟動文件名通知給 BOOTP 客戶機,客戶機通過什麼方式下載啟動文件呢?答案是,需要 TFTP 服務。3Com 的 DABS 包含了一個 TFTP 服務組件,當然,也可以下載一個免費的 TFTP 伺服器軟體長期使用。
在 TFTP 伺服器的設置中,規定一個服務目錄。將製作的 PXE 啟動文件 Pxeghost.img、Pxemenu.pxe 放到 TFTP 的服務目錄中。TFTP 伺服器設置為自動運行。
用 Ghost 多播克隆硬碟
現在運行 Ghost 多播伺服器,任務名稱為 Restore。設置完畢,按下[接受客戶(Accept Clients)]按鈕。啟動要接受硬碟克隆的無軟碟機工作站,如果以上步驟操作無誤,應該能夠實現 PXE 啟動,加入到多播克隆的任務當中。所有的目標工作站連接到本次任務之後,按下[發送(Send)]按鈕,開始克隆任務。
五、參數設置
在 Options 中可以設置參數。下面簡單介紹一下:
1.image write buffering:在建立備份文件時, 打開寫緩沖;
2.sure:選擇此項後, 不再會出現最終確認詢問 (建議不要選擇此項);
3.no int 13:選擇此項後, 不支持中斷 13 (預設時不選擇);
4.reboot:在對硬碟或者分區操作完成之後, 自動重啟計算機;
5.spanning:通過多個卷架構備份文件 (選擇此項時, 關閉 write buffering);
6.autoname:自動為 spanning 文件命名;
7.allow 64k fat clusters:允許使用 64K FAT 簇 (僅在 Windows NT 中支持);
8.ignore CRC errors:忽略 CRC 錯誤;
9.override size limit:如果出現分區大小不相配, 可忽略執行;
10.image read buffering:打開生成備份文件時的讀緩存 (預設時選中此項)。
六、軟體特性
1.存貯介質
Ghost 支持的存儲介質超出了我們的想像,它支持對等 LPT 介面、對等 USB 介面、對等 TCP/IP 介面、SCSI磁帶機、攜帶型設備(JAZ、ZIP、MO等)、光碟刻錄機(CDR、CDRW)等。而這些特性不需要任何外帶的驅動程序和軟體,只需一張軟盤就可以做到!特別是對光碟刻錄機的支持,如今的刻錄機和空白光碟都十分便宜,非常適合作備份的用途。
2.兼容性
Ghost 對現有的操作系統都有良好的支持,包括 FAT16、FAT32、NTFS、HPFS、UNIX、NOVELL 等文件存儲格式。同以前版本不同的是,Ghost 2001 加入了對 Linux EX2的支持(FIFO 文件存儲格式),這也就意味著 Linux 的用戶也可以用 Ghost 來備份系統了。
3.配套軟體
A.Ghost 瀏覽器
在以前的 Ghost版本中,我們只能對整個系統進行簡單的備份、復制、還原,要恢復單個的文件和文件夾還要使用外帶的 GhostEXP 軟體。現在,Symantec 公司已經將 Ghost 瀏覽器整合在軟體中。Ghost 瀏覽器採用類似於資源管理器的界面,通過它,我們可以方便迅速地在備份包中找出我們想要的文件和文件夾並還原。
使用Explorer可以備份整個硬碟或單個硬碟分區,點擊工具欄上的圓柱形圖標,彈出硬碟或分區選擇對話窗口,然後再選擇備份文件的儲存目錄並輸入名稱即可完成。要注意的是,非注冊用戶不能使用備份這項功能。
在 Ghost Explorer 中管理硬碟備份文件就非常方便了。首先選擇打開一個備份文件(File/Open),這時備份中的文件就像資源管理器一樣在程序界面窗口中列出,可以在其中非常方便地查看、打開文件,也可以查找文件,或者將某個文件刪除(但不能刪除目錄)。
在 Ghost Explorer 中提供了多種還原硬碟備份文件的方法,最方便的方法是使用滑鼠右鍵點擊某個文件,在彈出菜單中選擇 Restore,然後輸入要還原到的目錄,這樣,單個文件就從整個磁碟備份中還原出來了。當然,如果要還原整個磁碟備份,只需選擇左面目錄列表欄中最上面的帶磁碟圖標的目錄項,然後點擊工具欄中的還原圖標 (第二個) 就可以了。
B.GDisk
GDisk 是一個新加入的實用工具,它徹底取代了 FDisk 和 Format,功能有:
* 快速格式化。
* 隱藏和顯示分區。此功能允許一個以上的主 DOS分區,並且每個分區上的操作系統有不同的版本。隱藏分區的能力使計算機習慣於引導到選定的可引導分區,忽略其他隱藏分區中相同操作系統的安裝。
* 全面的分區報告。
* 高度安全的磁碟擦除。提供符合美國國防部標准和更高安全標準的磁碟擦除選項。
與使用互動式菜單的 FDisk 不同,GDisk是由命令行驅動的。這提供了更快的配置磁碟分區和在批處理文件中定義 GDisk操作的能力。但與此同時,幾十個參數會令普通用戶頭疼,因此筆者不推薦一般用戶使用,Symantec 公司也應該推出相應的GUI(圖形用戶界面)控制台以方便用戶使用。具體的參數說明可以用命令行 gdisk/? 了解。
C.Live Update
Live Update 是 Symantec公司軟體的一個通用升級程序,它能夠檢查當前系統中已安裝的 Symantec 軟體,並且通過英特網對軟體進行在線升級。
在安裝 Ghost 2001 時,安裝程序自動升級了 Live Update 程序的版本。
七、命令行參數:(Ghost 的無人 備份/恢復/復制 操作)
其實 Ghost 2001 的功能遠遠不止它主程序中顯示的那些,Ghost 可以在其啟動的命令行中添加眾多參數以實現更多的功能。命令行參數在使用時頗為復雜,不過我們可以製作批處理文件,從而「一勞永逸」(類似於無人安裝 Windows 98 和Windows 2000)。現在讓我們來了解一些常用的參數(了解更加詳細的參數介紹可查看 Ghost 的幫助文件)。
1.-rb
本次 Ghost 操作結束退出時自動重啟。這樣,在復制系統時就可以放心離開了。
2.-fx
本次 Ghost 操作結束退出時自動回到DOS提示符。
3.-sure
對所有要求確認的提示或警告一律回答「Yes」。此參數有一定危險性,只建議高級用戶使用。
4.-fro
如果源分區發現壞簇,則略過提示而強制拷貝。此參數可用於試著挽救硬碟壞道中的數據。
5.@filename
在 filename 中指定 txt 文件。txt文件中為 Ghost 的附加參數,這樣做可以不受DOS命令行 150 個字元的限制。
6.-f32
將源 FAT16 分區拷貝後轉換成 FAT32(前提是目標分區不小於 2G)。WinNT 4 和Windows95、97用戶慎用。
7.-bootcd
當直接向光碟中備份文件時,此選項可以使光碟變成可引導。此過程需要放入啟動盤。
8.-fatlimit
將 NT 的 FAT16 分區限制在 2G。此參數在復制 Windows NT 分區,且不想使用64k/簇的 FAT16 時非常有用。
9.-span
分卷參數。當空間不足時提示復制到另一個分區的另一個備份包。
10.-auto
分卷拷貝時不提示就自動賦予一個文件名繼續執行。
11.-crcignore
忽略備份包中的 CRC ERROR。除非需要搶救備份包中的數據,否則不要使用此參數,以防數據錯誤。
12.-ia
全部映像。Ghost 會對硬碟上所有的分區逐個進行備份。
13.-ial
全部映像,類似於 -ia 參數,對 Linux 分區逐個進行備份。
14.-id
全部映像。類似於 -ia 參數,但包含分區的引導信息。
15.-quiet
操作過程中禁止狀態更新和用戶干預。
16.-script
可以執行多個 Ghost 命令行。命令行存放在指定的文件中。
17.-split=x
將備份包劃分成多個分卷,每個分卷的大小為 x兆。這個功能非常實用,用於大型備份包復制到移動式存儲設備上,例如將一個 1.9G 的備份包復制到 3 張刻錄盤上。
18.-z
將磁碟或分區上的內容保存到映像文件時進行壓縮。-z 或 -z1 為低壓縮率(快速);-z2 為高壓縮率(中速);-z3 至 -z9 壓縮率依次增大(速度依次減慢)。
19.-clone
這是實現 Ghost 無人備份/恢復的核心參數。使用語法為:
-clone,MODE=(operation),SRC=(source),DST=(destination),[SZE(size),SZE(size)...]
此參數行較為復雜,且各參數之間不能含有空格。其中 operation意為操作類型,值可取::磁碟到磁碟;load:文件到磁碟;mp:磁碟到文件;p:分區到分區;pload:文件到分區;pmp:分區到文件。
Source 意為操作源,值可取:驅動器號,從1開始;或者為文件名,需要寫絕對路徑。
Destination 意為目標位置,值可取:驅動器號,從 1開始;或者為文件名,需要寫絕對路徑;@CDx,刻錄機,x 表示刻錄機的驅動器號,從1開始。
下面舉例說明:
1.命令行參數:ghostpe.exe -clone,mode=,src=1,dst=2
完成操作:將本地磁碟1復制到本地磁碟2。
2.命令行參數:ghostpe.exe -clone,mode=p,src=1:2,dst=2:1
完成操作:將本地磁碟1上的第二分區復制到本地磁碟2的第一分區。
3.命令行參數:ghostpe.exe-clone,mode=load,src=g:\3prtdisk.gho,dst=1,sze1=450M,sze2=1599M,sze3=2047M
完成操作:從映像文件裝載磁碟1,並將第一個分區的大小調整為450MB,第二個調整為1599MB,第三個調整為2047MB。
4.命令行參數:ghostpe.exe -clone,mode=pmp,src2:1:4:6,dst=d:\prt246.gho
完成操作:創建僅含有選定分區的映像文件。從磁碟2上選擇分區1、4、6。
八、一些示例
ghost.exe -clone,mode=,src=1,dst=2 -sure
硬碟對拷
ghost.exe -clone,mode=p,src=1:2,dst=2:1 -sure
將一號硬碟的第二個分區復制到二號硬碟的第一個分區
ghost.exe -clone,mode=pmp,src=1:2,dst=g:\bac.gho
將一號硬碟的第二個分區做成映像文件放到 g 分區中
ghost.exe -clone,mode=pload,src=g:\bac.gho:2,dst=1:2
從內部存有兩個分區的映像文件中,把第二個分區還原到硬碟的第二個分區
ghost.exe -clone,mode=pload,src=g:\bac.gho,dst=1:1 -fx -sure -rb
用 g 盤的 bac.gho 文件還原 c 盤。完成後不顯示任何信息,直接啟動
ghost.exe -clone,mode=load,src=g:\bac.gho,dst=2,SZE1=60P,SZE2=40P
將映像文件還原到第二個硬碟,並將分區大小比例修改成 60:40
自動還原磁碟:
首先做一個啟動盤,包含 Config.sys, Autoexec.bat, Command.com, Io.sys, Ghost.exe 文件(可以用 windows 做啟動盤的程序完成)。Autoexec.bat 包含以下命令:
Ghost.exe -clone,mode=pload,src=d:\bac.gho,dst=1:1 -fx -sure -rb
利用在 D 盤的文件自動還原,結束以後自動退出 ghost 並且重新啟動。
自動備份磁碟:
ghost.exe -clone,mode=pmp,src=1:1,dst=d:\bac.gho -fx -sure -rb
自動還原光碟:
包含文件:Config.sys, Autoexec.bat, Mscdex.exe (CDROM 執行程序), Oakcdrom.sys (ATAPI CDROM 兼容驅動程序), Ghost.exe。
Config.sys 內容為:
DEVICE=OAKCDROM.SYS /D:IDECD001
Autoexec.bat 內容為:
MSCDEX.EXE /D:IDECE001 /L:Z
Ghost -clone,mode=load,src=z:\bac.gho,dst=1:1 -sure -rb
可以根據下面的具體說明修改示例:
1.-clone
-clone 在使用時必須加入參數,它同時也是所有的 switch{batch switch} 里最實用的。下面是 clone 所定義的參數:
mode={|load|mp|p|pload|pmp},
src={drive|file|driveartition},
dst={drive|file|driveartition}
mode 指定要使用哪種 clone 所提供的命令
硬碟到硬碟的復制 (disk to disk )
load 文件還原到硬碟 (file to disk load)
mp 將硬碟做成映像文件 (disk to file mp)
p 分區到分區的復制 (partition to partition )
pload 文件還原到分區 (file to partition load)
pmp 分區備份成映像文件(partition to file mp)
src 指定了 ghost 運行時使用的源分區的位置模式及其意義。對應 mode 命令 src 所使用參數例子:
COPY/DUMP 源硬碟號。以 1 代表第一號硬碟
LOAD 映像文件名。g:/back98/setup98.gho 或裝置名稱 (drive)
PCOPY/PDUMP 源分區號。1:2 代表的是硬碟1的第二個分區
PLOAD 分區映像文件名加上分區號或是驅動器名加上分區號。g:\back98.gho:2 代表映像文件里的第二個分區
dst 指定運行 Ghost 時使用的目標位置模式及其意義。對應 mode 命令 dst 所使用參數例子:
COPY/DUMP 目的硬碟號。2 代表第二號硬碟
LOAD 硬碟映像文件名。例 g:\back98\setup98.gho
PCOPY/PLOAD 目的分區號。2:2 代表硬碟 2 的第二個分區
PDUMP 分區映像文件名加分區號。g:\back98\setup98.gho:2
SZEn 指定所使用目的分區的大小:
n=xxxxM 指定第 n 目的分區的大小為 xxxxMB。如 SZE2=800M 表示分區 2 的大小為 800MB
n=mmP 指定第 n 目的分區的大小為整個硬碟的 mm 個百分比。
2.-fxo 當源物件出現壞塊時,強迫復制繼續進行
3.-fx 當ghost完成新系統的工作後不顯示 press ctrl-alt-del to reboot 直接回到DOS下
4.-ia 完全執行扇區到扇區的復制。當由一個映像文件或由另一個硬碟為來源,復制一個分區時,Ghost將首先檢查來源分區,再決定是要復制文件和目錄結構還是要做映像復制(扇區到扇區)。預設是這種形式。但是有的時候,硬碟里特定的位置可能會放一些隱藏的與系統安全有關的文件。只有用扇區到扇區復制的方法才能正確復制
5.-pwd and -pwd=x 給映像文件加密
6.-rb 在還原或復制完成以後,讓系統重新啟動
7.-sure 可以和 clone 合用。Ghost 不會顯示 proceed with disk clone-destination drive will be overwritten? 提示信息
九、注意事項
1.在備份系統時,單個的備份文件最好不要超過 2GB。
2.在備份系統前,最好將一些無用的文件刪除以減少Ghost文件的體積。通常無用的文件有:Windows 的臨時文件夾、IE 臨時文件夾、Windows 的內存交換文件。這些文件通常要佔去100 多兆硬碟空間。
3.在備份系統前,整理目標盤和源盤,以加快備份速度。
4.在備份系統前及恢復系統前,最好檢查一下目標盤和源盤,糾正磁碟錯誤。
5.在恢復系統時,最好先檢查一下要恢復的目標盤是否有重要的文件還未轉移,千萬不要等硬碟信息被覆蓋後才後悔莫及啊。
6.在選擇壓縮率時,建議不要選擇最高壓縮率,因為最高壓縮率非常耗時,而壓縮率又沒有明顯的提高。
7.在新安裝了軟體和硬體後,最好重新製作映像文件,否則很可能在恢復後出現一些莫名其妙的錯誤。
我只能說這么多了,不知道誰還能說的更詳細呢~!
⑦ 請問這個指令什麼意思[DABS X002 Y004 D8142]
是三菱PLC與三菱伺服驅動器特有指令,DABS是絕對位置計算,可以反映伺服在掉電時准確記錄當前位置。
X002 是放大器給出信號 絕對位置
Y004 是放大器輸入信號 啟動伺服
D8142 記錄當前脈沖
⑧ 如何實現windows那樣的文件夾效果
Ghost使用秘籍
電腦一方面帶給用戶極大的便利;另一方面,由於使用不當或不可預見的原因引起的操作系統癱瘓、數據丟失問題,也給用戶帶來很大的煩惱。有鑒於此,作為一名電腦用戶,掌握備份與恢復的真功夫便顯得尤為重要。Ghost以功能強大、使用方便著稱,成為硬碟備份和恢復類軟體中的翹楚。本著對正在使用Ghost的用戶有所幫助、而讓以前未使用過它的用戶少走一些彎路的想法,本文著重談談該軟體的一些使用技巧。
■選用哪一版本的Ghost?
Ghost版本眾多,一般而言,玩家應選用5.1c以後的版本,包括5.1c、5.1d、Ghost 2000等。由於Symantec收購了Ghost產品,故這些較新的版本均稱為Symantec Ghost。以上列舉的版本兼容FAT32分區方式,支持中文長文件名,能夠很好地實現操作系統和數據文件的備份,亦可用於硬碟或分區的「克隆」操作,這在新裝機或更換硬碟時特別有用。 而5.1以前的版本,則或多或少存在問題。筆者曾使用4.0版Ghost,軟體已成功注冊,在將分區製成Image文件時,一切正常,而當由映象文件回寫分區時,操作過程顯示正常,但實際上並未對目標分區進行任何改變,反復試驗多次,皆未能如願。
■為何要備份操作系統?
為避免系統癱瘓後重裝操作系統、應用軟體和配置Internet相關參數的浩大工程,必須對操作系統進行備份。為此,硬碟必須進行分區,至少應分成C、D兩個盤,其中C盤用來安裝操作系統,D盤存放應用軟體、數據文件以及Ghost備份的C盤映象文件。這樣,當操作系統出現問題後,D盤並未受到任何影響,只須將D盤存放的映象文件寫回C盤分區,即可將操作系統恢復原樣。
■如何配置C盤?
C盤分區大小要適當。分區太小,影響Windows運行速度;分區過大,要麼造成硬碟空間浪費,要麼造成備份數據量太多,既白白佔用了寶貴的硬碟,又在備份和恢復過程中耗費額外的時間。 以使用Windows 98操作系統為例,C盤大小在600MB左右比較合適。Windows98大約佔用200MB,虛擬內存大約近百兆,再加上一些常用的工具小軟體,一共佔用大約400MB,還剩200MB左右自由空間,Windows 98運行起來不會捉襟見肘。對C盤分區進行備份時,映象文件即使不壓縮,也就三、四百兆,可謂兩全其美。
■備份前,別忘了整理C盤
(1)先整理操作系統。把與網路相關的設置配置完畢,把可能存在於Windows 98的Temp子文件夾里的臨時文件都刪除干凈,再把MyDocuments(默認存放用戶文檔的地方)和Temporary Internet Files(瀏覽器暫存文件處,保留其中的文件,用戶可以實現離線瀏覽)文件夾搬到D盤,具體搬遷辦法參看相關文章。這樣做的好處很明顯,可以保證所有由用戶產生的文件都不存放在C盤,一旦出現意外,能夠毫無顧忌地重寫C盤。另外,也可以刪去那些用處不大的幫助文件、自述文件、屏幕保護和背景圖片以及眾多的音頻文件等,以便使操作系統達到更好的瘦身減肥效果。
(2)在安裝大型應用軟體,如Office 2000、Photoshop 5.0等時,最好把它們安裝到D盤,這樣C盤就不至於過分膨脹,可使備份數據量大大減小。
(3)常用工具小軟體,如Winzip、ACDSee、刻錄小軟體等,可以安裝在D盤,安裝在C盤也無妨,反正占不了多大空間。
最後,別忘了再進行一次徹底的磁碟碎片整理,將C盤調整到最優狀態。接著,即可從DOS下運行Ghost軟體,製作C盤映象文件。
■分區備份技巧
硬碟分區備份的一般操作方法:從Ghost主選單中選擇「Local→Partition→To Image」選項,打開製作分區映象文件窗口,挑選欲備份的硬碟(如果掛有一個以上硬碟)和分區,再指定映象文件名稱和存放路徑,確認之後,即開始生成擴展名為.gho的映象文件,耗時大約十分鍾左右。
備份技巧:
(1)最好在D盤建一個Ghost文件夾,將生成的備份文件*.gho與Ghost.exe都存放在此文件夾下。這樣,日後進行恢復操作時,一啟動Ghost軟體,立刻就能顯示出備份的映象文件,無須到處去查找。要知道,在DOS下運行Ghost軟體,如果未載入滑鼠驅動程序,單靠鍵盤找起文件來是很煩人的。
(2)將備份的映象文件設成系統、隱含、只讀屬性。一方面可以防止意外刪除、感染病毒;另一方面可以避免在對D盤進行碎片整理時,頻繁移動映象文件的位置,節約整理磁碟時間。
(3)在生成映象文件時,通常應該採用最大壓縮演算法,這樣,生成的映象文件位元組明顯減少,節省硬碟空間,否則,映象文件將和C盤文件總位元組數一樣。採用最大壓縮方式,雖然處理時間會相應延長,但分區備份和恢復操作頻率很低,也許好幾個月才進行一次,還是節省硬碟空間更劃算。
■讓備份和恢復更加保險
由於病毒或操作失誤,有可能造成映象文件丟失或文件分區表損壞。如果僅僅按照上述方法做了備份,仍然有遭到「滅頂之災」的危險,盡管幾率很小。因此有條件的話,還應該採取以下防範措施:
(1)備份文件分區表信息。採用Kill 98、KV300、Norton等軟體,即可在軟盤上生成文件分區表備份。如遇病毒攻擊分區信息致癱時,可輕松予以復原。
(2)將映象文件復制到外置硬碟或刻錄到光碟上,以防硬碟上的映象文件受損。
(3)將Ghost.exe文件拷貝至軟盤上,必要時可以運行軟盤上的文件,由光碟或外置存儲設備恢復分區原貌。
■恢復備份需知
對於採用了啟動管理器分區實現雙啟動或多啟動方式的硬碟,進行恢復分區操作(即由映象文件重寫分區)時,最好先關閉啟動管理,然後進行恢復操作,待一切正常後,再將啟動管理器復原。之所以這么做,是因為啟動管理器所在分區必定是活動分區,如果當初製作備份的分區也是活動的,那麼在執行恢復操作後,就同時出現兩個活動分區,極易造成死機。
有時,在執行重寫分區操作後,DIR列目錄,發現全部是怪怪的、長長的亂碼文件名,並且全部文件都位於根目錄下,看不到樹狀子目錄結構了。這時,千萬不要驚慌,更不要冒失地刪除文件或格式化硬碟。其實,你的硬碟根本沒事兒,只需重新啟動電腦,就會一切正常了。
■應用Ghost需知
(1)無論是備份還是恢復分區,都應盡量在純DOS環境下進行,一般不要從Windows或假DOS下進行相應的操作。
Ghost軟體包里有一個Explorer程序,在Windows環境下運行它後,可以像普通解壓軟體那樣,隨便從映象文件里釋放文件或文件夾。不過,竊以為用處不大。因為Ghost的最大好處就是可以不管三七二十一,在最短的時間里可以將分區恢復原樣,而無須過問到底是缺損哪個文件引起的故障。
(2)在使用Ghost進行硬碟或分區對拷時,由容量小的硬碟或分區向容量等同或大的硬碟、分區進行克隆是完全沒有問題的,並且目標硬碟或分區會與源盤一樣,大於源盤容量的部分,就成為自由空間。例如,源分區共600MB,採用FAT16分區方式,共有400MB數據,而目標分區共1GB,採用FAT32分區方式,則由源分區順利克隆到目標分區後,目標分區也變成了FAT16分區方式,但容量仍為1GB,數據文件同樣占據400MB空間。所以,在將電腦升級為大硬碟時,可以很容易地將原來硬碟上的內容復制過去,根本無須重裝操作系統和應用軟體。
(3)有些玩家的Ghost是未授權版本,需要找到擴展名為.env的文件,先行注冊方能正常使用,注冊以DOS下的命令行方式進行,其格式在軟體包自述文件里有詳細說明。
GHOST使用步驟圖解
即使你擁有最先進的電腦,採用傳統的方法,Windows的安裝速度仍然是令人頭痛的!有沒有什麼重裝系統的簡便方法呢?Ghost就是其中的一種選擇,GHOST是大家在備份/維護系統最常用也最功能強大的工具軟體.
Norton Ghost的文件比較小,只要一個主文件Ghost.exe(Ghost 2002僅600多KB)就可工作,一張啟動盤就可以裝下。由於是純DOS程序,建議做張啟動盤並將Norton Ghost放在軟盤上。下面,我們就一步步來看看怎樣製作鏡像文件和恢復系統:
製作主分區鏡像
運行Norton Ghost後,首先看到的是主菜單,其中各個選項的含義是:
Local:本地硬碟間的操作
LPT:並行口連接的硬碟間操作
NetBios:網路硬碟間的操作
Option:設置(一般使用默認值)
以單機為例,選擇"Local"菜單,這里又包括以下子菜單:
Disk:硬碟操作選項
Partition:分區操作選項
Check:檢查功能(一般忽略)
好,了飭瞬說ハ畹暮�搴螅�頤薔塗梢鑰�肌爸刈爸�謾綳恕?lt;br>
圖1:選擇"分區"到"鏡像"
選擇"Partition"看到如下命令:
TO Partition:分區對分區拷貝
TO Image:分區內容備份成鏡像
From Image:鏡像復原到分區
對於一般用戶,用得最多的還是"TO Partition"(分區操作)中的"TO Image"( 分區內容備份成鏡像文件)或"From Image"(從鏡像文件復原到分區)兩項。
圖2:正確選擇源硬碟
首先用一張干凈的啟動盤啟動機器到純DOS模式下,執行Ghost.exe文件,在顯示出Ghost主畫面後,選擇"Local→Partition→To Image",屏幕顯示出硬碟選擇畫面,選擇源分區所在的硬碟"1"(注意例圖為雙硬碟)。
圖3:正確選擇源分區
選擇要製作鏡像文件的分區(即源分區),這里選擇分區"1"(即C分區),選擇後單擊"OK"按鈕。
圖4:為鏡像文件命名
發表: 2005-02-05 12:50:10 第39樓
選擇鏡像文件保存的位置(要特別注意的是不能選擇需要備份的分區C),再在"Filename"文本框鍵入鏡像文件名稱,如"C_BAK"或"C_BAK.GHO",然後按回車鍵即可。
圖5:開始製作分區鏡像
接下來Norton Ghost會詢問你是否需要壓縮鏡像文件,"No"表示不做任何壓縮;"Fast"的意思是進行小比例壓縮但是備份工作的執行速度較快;"High"是採用較高的壓縮比但是備份速度相對較慢。一般都是選擇"High",雖然速度稍慢,但鏡像文件所佔用的硬碟空間會大大降低。
這一切准備工作做完後,Norton Ghost就開始為你製作這個名為"C_BAK.GHO"的鏡像文件了。根據筆者的經驗,備份速度與CPU主頻和內容容量有很大的關系,一般來說64MB內存可以達到71MB/min,筆者的C盤大約使用了2GB左右,只用了10分鍾左右,為了避免誤刪文件,最好將這個鏡像文件的屬性設定為"只讀"。
恢復主分區鏡像
通過上面的工作,我們已經在D盤備份了一個名為"C_BAK.GHO"的鏡像文件了,在必要時可按下面的步驟快速恢復C盤的本來面目。
圖6:選擇源鏡像文件
運行Norton Ghost,在主菜單中選擇"Local→Partition→From Image"項(注意這次是"From Image"項),從D盤中選擇剛才的主分區鏡像文件C_BAK.GHO。
圖7:確定源分區
從"C_BAK.GHO"文件中選擇需要恢復的分區,這里本來就只有一個C分區的鏡像,因此直接選擇該分區。
圖8:選擇目標硬碟
選擇要恢復鏡像的目標硬碟,一般來說是主硬碟。
圖9:確目標分區
選擇要恢復鏡像的目標硬碟中的目標分區C,注意目標分區千萬不能選錯,否則後果不堪設想。
最後,Norton Ghost會再一次詢問你是否進行恢復操作,並且警告你如果進行的話目標分區上的所有資料將會全部消失,點擊"Y"後就開始恢復操作,時間與製作鏡像的時間大致相等。恢復工作結束後,Norton Ghost會建議重新啟動系統,按照提示要求做就可以了。很快一個干凈、完美的基本系統便重新出現在你面前。
使用Norton Ghost的注意點
1、將Norton Ghost放在啟動盤上;
2、正確設置硬碟工作方式,讓你的硬碟工作在Ultra ATA/33/66模式下,製作鏡像文件的速度比較快;
3、鏡像文件應盡量保持"干凈"、"基本"。應用軟體安裝得越多,系統被修改得越嚴重,安裝新軟體也就越容易出錯,所以在製作鏡像文件前,千萬不要安裝過多的應用軟體;
4、恢復鏡像文件的同時,目標盤上的原有數據全部被覆蓋,使用任何反刪除法都無法恢復。
-------------------------------------------
二、區域網操作
LPT 是通過並口傳送備份文件,下面有兩個選項:slave 和 master, 分別用以連接主機和客戶機。 網路基本輸入輸出系統 NetBios 和 LPT 相似, 也有 slave 和 master 兩個選項, 作用與 LPT 相同。
先和平時一樣將要 ghost 的分區做成一個 *.gho 文件,再在一台 win98 上安裝Symantec Ghost 企業版,重啟。
1. 首先製作一張 ghost 帶網卡驅動的啟動盤。Start > Programs > Symantec Ghost > Ghost Boot Wizard->Network Boot Disk 如果你的網卡在列表內直接選擇它就可以生成一張帶 PC-DOS 的啟動盤。(但 6.5版的生成的軟盤經常有問題,不能成功啟動)如果你的網卡不在列表內,你要建立專用的 Packet Driver。ADD->Packet Driver (網卡的驅動程序中有)往下根據提示一步一步走,填入工作站的 ip(ghost 一定要 tcp/ip 協議)。最後生成一張軟盤,但此軟盤仍不能使用,要改 autoexec.bat 文件在 net xxxx.dos 後面加一個16進制的地址,如 0X75 等。多台計算機只需改 wattcp.cfg 文件中的 ip 即可:
IP = 192.168.100.44
NETMASK = 255.255.255.0
GATEWAY = 192.168.100.1
2. 在 server 端運行 multicast server 出來的畫面。先給 server一個Session Name(別名)如:bb,再選擇 image file 就是你的 gho 文件。然後 ->Dump From Client->rtitions->More Options-> 在 auto start 的 client 中填入 50(如果你要同時復制50台)->accept client 就算完成了,當你的工作站數達到50台時,server就自動傳送*.gho 文件。
3.詳述:
目前,相當多的電子教室都採用了沒有軟碟機、光碟機的工作站。在沒有軟碟機、光碟機的情況下,當硬碟的軟體系統出現問題時,能否實現網路硬碟克隆呢?PXE(Preboot Execution Environment,它是基於 TCP/IP、DHCP、TFTP 等 Internet 協議之上的擴展網路協議)技術提供的從網路啟動的功能,讓我們找到了解決之道。下面,我們就來講解怎樣採用Ghost 7.0來實現基於 PXE 的網路硬碟克隆。
-------------------------------
三、 網路硬碟克隆過程簡述
網路硬碟克隆過程為:在裝有軟碟機的工作站上,用一張引導盤來啟動機器,連接到伺服器,使用 Ghost 多播服務(Multicast Server)將硬碟或分區的映像克隆到工作站,這樣就實現了不拆機、安全、快速的網路硬碟克隆。
實現 PXE 網路啟動方式
對於沒有軟碟機、光碟機的工作站,要實現PXE網路啟動方式,需要完成三個步驟:
1、工作站的PXE啟動設置
PXE網路啟動一般要求在網卡上加裝 PXE 啟動晶元(PXE Boot ROM);對於某些型號的網卡,也可以將 PXE 啟動代碼(Boot Code)寫入主板的 Flash ROM;而一些主板上集成了網卡的品牌機(例如清華同方的商用機),可直接支持PXE啟動。
常用的 RTL8139 晶元的網卡,其 PXE 啟動設置方式是:機器啟動時根據屏幕提示按下Shift+F10,在啟動類型中選擇PXE,開啟網路啟動選項即可。
2、製作 PXE 啟動文件
製作 PXE 的啟動文件,推薦使用 3Com 的 DABS(Dynamic Access Boot Services)。DABS 提供了功能強大的 PXE 啟動服務、管理功能,但是,網上可供下載的是一個30天的試用版。所以,我們只用它的啟動映像文件製作功能,而由 Windows 2000 Server 的 DHCP 伺服器來提供 PXE 啟動服務。
DABS 可以安裝在任何一台運行 Windows 的機器上。安裝後,運行 3Com Boot Image Editor,出現主界面圖。選擇"創建TCP/IP或PXE映像文件(Create a TCP/IP or PXE image file)",出現對話窗口。為即將建立的映像文件命名,例如:pxeghost.img,其他採用默認選項,將經測試正常的網路啟動盤放入軟碟機,選擇[OK],創建PXE啟動映像 Pxeghost.img文件。
在 3Com Boot Image Editor 的主菜單中,選擇"創建PXE菜單啟動文件(Creat a PXE menu boot file)",在出現的窗口中選擇[添加(Add)],加入我們剛剛創建的啟動映像文件Pxeghost.img,在"選項(Options)"標簽中可以設置菜單標題和等待時間。
選擇[保存(Save)],給保存的PXE菜單啟動文件命名為 Pxemenu.pxe。
3、伺服器的PXE啟動服務設置
Windows 2000 Server 的 DHCP 服務支持兩種啟動協議:DHCP 和 BOOTP。我們可以設定以下三種選擇:僅 DHCP、僅 BOOTP、兩者。如果我們的區域網中由其他的 DHCP 伺服器提供動態 IP 地址分配,那麼這里選"僅BOOTP"即可;如果需要這台伺服器提供動態 IP 地址分配,則需要選"兩者"。
接下來,設置啟動文件名。在DHCP伺服器的作用域選項中配置選項"067:啟動文件名",字串值為我們創建的 PXE 菜單啟動文件名 Pxemenu.pxe。注意:文件名不包含路徑。
DHCP 伺服器只是將啟動文件名通知給 BOOTP 客戶機,客戶機通過什麼方式下載啟動文件呢?答案是,需要 TFTP 服務。3Com 的 DABS 包含了一個 TFTP 服務組件,當然,也可以下載一個免費的 TFTP 伺服器軟體長期使用。
在 TFTP 伺服器的設置中,規定一個服務目錄。將製作的 PXE 啟動文件 Pxeghost.img、Pxemenu.pxe 放到 TFTP 的服務目錄中。TFTP 伺服器設置為自動運行。
用 Ghost 多播克隆硬碟
現在運行 Ghost 多播伺服器,任務名稱為 Restore。設置完畢,按下[接受客戶(Accept Clients)]按鈕。啟動要接受硬碟克隆的無軟碟機工作站,如果以上步驟操作無誤,應該能夠實現 PXE 啟動,加入到多播克隆的任務當中。所有的目標工作站連接到本次任務之後,按下[發送(Send)]按鈕,開始克隆任務。
⑨ 地球的平均半徑為6371千米,已知地球上兩個城市A、B的經度和緯度,編程序求出這兩個城市之間的地面距離。
#include<iostream>
#include<math.h>
using namespace std;
#ifndef M_PI
#define M_PI (3.141592653)
#endif
#define EARTH_R (6371.0)
#define MIN_DISTANCE (0.00001)//最小分辨度為1厘米
//求double類型的絕對值
double dabs(double value){
return value > 0.0 ? value : (0.0 - value);
}
//求double類型的較大數
double max(double a, double b){
return a > b ? a : b;
}
//求double類型的較小數
double min(double a, double b){
return a < b ? a : b;
}
double toRadian(double angle){
return angle / 360.0 * 2 * M_PI;
}
//已知半徑、圓心角角度(弧度制),求圓心角對應的弦長
double getChordByRadiusAngle(double radius, double angle){
return 2.0 * radius * sin((angle / 2.0));//求得弦長
}
//已知半徑、弦長,求弧對應的弧度(弧度制)
double getAngleByRadiusChord(double radius, double chord){
return 2.0 * asin(chord / 2.0 / radius);//求得弦對應的大圓圓心角,弧度制
}
//已知半徑、弦長,求弦端點在球面上的距離
double getArcByRadiusChord(double radius, double chord){
double angle =getAngleByRadiusChord(radius, chord);//求得弦對應的大圓圓心角,弧度制
double distance = (M_PI * radius) * (angle / M_PI);
return distance;
}
//經度相同,求緯度不同的兩點A、B間的弦長
//輸入:A點的緯度([90,-90],北緯為正)、B點的緯度
//輸出:點A、B間的弦長
double chord_Longitude(double latitudeA, double latitudeB){
double latitudeDiff = dabs(latitudeA - latitudeB);
double angle = toRadian(latitudeDiff);//求得大圓圓心角,弧度制
return getChordByRadiusAngle(EARTH_R, angle);//求得弦長
}
//緯度相同,求經度不同的兩點A、B間的弦長
//輸入:A點的經度([180,-180],東經為正)、B點的經度、緯度([90,-90],北緯為正)
//輸出:點A、B間的弦長
double chord_Latitude(double longitudeA, double longitudeB, double latitude){
latitude = dabs(latitude);
double laR = EARTH_R * cos((latitude / 180.0) * M_PI);//求得緯線圈半徑
double longitudeDiff = dabs(longitudeA - longitudeB);
longitudeDiff = longitudeDiff < 180.0 ? longitudeDiff : (360.0 - longitudeDiff);
double angle = toRadian(longitudeDiff);
return getChordByRadiusAngle(laR, angle);//求得弦長
}
//輸入兩點的經緯度,求出兩點的距離
//輸入:A點的經度([180,-180],東經為正)、A點的緯度([90,-90],北緯為正)、B點的經度、B點的緯度
//輸出:點A、B的距離
//先求得兩點的弦長,再求弦對應的大圓圓心角,最後得到大圓弧線長即為距離
double distanceOf2Points(double longitudeA, double latitudeA, double longitudeB, double latitudeB){
double chord = 0.0;
/*
if(longitudeA == longitudeB){//經度相同
chord = chord_Longitude(latitudeA, latitudeB);
}else if(latitudeA == latitudeB){//緯度相同
chord = chord_Latitude(longitudeA, longitudeB, latitudeA);
}else{*/
//求以AB為對角線,以過點A、B的兩條緯線、經線的四個交點為頂點的等腰梯形的四條邊長
double baselineA = chord_Latitude(longitudeA, longitudeB, latitudeA);//過點A的底線長
double baselineB = chord_Latitude(longitudeA, longitudeB, latitudeB);//過點B的底線長
double waistline = chord_Longitude(latitudeA, latitudeB);//腰線長
/*
if(baselineA == baselineB){//實為矩形
chord = sqrt(baselineA * baselineA + waistline * waistline);
std::cout<<"矩形: "<<chord<<endl;
}else{*/
double baselineS = min(baselineA, baselineB);//較短的底線
double baselineL = max(baselineA, baselineB);//較長的底線
double shortline = (baselineL - baselineS) / 2.0;//分割中間矩形後,邊側直角三角形的邊
chord = sqrt(waistline * waistline - shortline * shortline + (baselineL - shortline) * (baselineL - shortline));
//}
//}
double distance = getArcByRadiusChord(EARTH_R, chord);
if(distance >= MIN_DISTANCE){
return distance;
}
return 0.0;
}
int main(){
double params[4];
int i;
double distance;
std::cout<<"輸入格式:A點經度 A點緯度 B點經度 B點緯度"<<std::endl<<std::endl;
while(true){
i = 0;
distance = -1.0;
while(std::cin>>params[i]){//讀入四個經緯值
i++;
if(4 == i){
break;
}
}
if(4 == i){
distance = distanceOf2Points(params[0], params[1], params[2], params[3]);
std::cout<<"A點("<<params[0]<<","<<params[1]<<")、B點("<<params[2]<<","<<params[3]<<") 的距離為:"<<std::endl<<distance<<"(千米)"<<std::endl<<std::endl;
}else{
break;//輸入非數字 字元時,結束程序
}
}
return 0;
}