青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

socketref,再見!高德

https://github.com/adoggie

  C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
  246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

常用鏈接

留言簿(54)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

#

/sbin/service crond start     //啟動服務(wù)
/sbin/service crond stop     //關(guān)閉服務(wù)
/sbin/service crond restart //重啟服務(wù)
/sbin/service crond reload     //重新載入配置

在/etc/rc.d/rc.local這個腳本的末尾加上:
/sbin/service crond start


1.直接用crontab命令編輯
cron服務(wù)提供crontab命令來設(shè)定cron服務(wù)的,以下是這個命令的一些參數(shù)與說明:
crontab -u //設(shè)定某個用戶的cron服務(wù),一般root用戶在執(zhí)行這個命令的時候需要此參數(shù)

crontab -l //列出某個用戶cron服務(wù)的詳細內(nèi)容

crontab -r //刪除沒個用戶的cron服務(wù)

crontab -e //編輯某個用戶的cron服務(wù)

比如說root查看自己的cron設(shè)置:crontab -u root -l

再例如,root想刪除fred的cron設(shè)置:crontab -u fred -r

在編輯cron服務(wù)時,編輯的內(nèi)容有一些格式和約定,輸入:crontab -u root -e

進入vi編輯模式,編輯的內(nèi)容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt

時間的設(shè)定我們有一定的約定,前面五個*號代表五個數(shù)字,數(shù)字的取值范圍和含義如下:
分鐘 (0-59)
小時 (0-23)
日期 (1-31)
月份 (1-12)
星期 (0-6)//0代表星期天

除了數(shù)字還有幾個個特殊的符號就是"*"、"/"和"-"、",",*代表所有的取值范圍內(nèi)的數(shù)字,"/"代表每的意思,"*/5"表示每5個單位,"-"代表從某個數(shù)字到某個數(shù)字,","分開幾個離散的數(shù)字。以下舉幾個例子說明問題:

每天早上6點

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意單純echo,從屏幕上看不到任何輸出,因為cron把任何輸出都email到root的信箱了。

每兩個小時

0 */2 * * * echo "Have a break now." >> /tmp/test.txt

晚上11點到早上8點之間每兩個小時,早上八點

0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt

每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點

0 11 4 * 1-3 command line

1月1日早上4點

0 4 1 1 * command line

每次編輯完某個用戶的cron設(shè)置后,cron自動在/var/spool/cron下生成一個與此用戶同名的文件,此用戶的cron信息都記錄在這個文件中,這個文件是不可以直接編輯的,只可以用crontab -e 來編輯。cron啟動后每過一份鐘讀一次這個文件,檢查是否要執(zhí)行里面的命令。因此此文件修改后不需要重新啟動cron服務(wù)。

2.編輯/etc/crontab 文件配置cron

cron 服務(wù)每分鐘不僅要讀一次/var/spool/cron內(nèi)的所有文件,還需要讀一次/etc/crontab,因此我們配置這個文件也能運用cron服務(wù)做一些事情。用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統(tǒng)的任務(wù)。此文件的文件格式是:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出現(xiàn)錯誤,或者有數(shù)據(jù)輸出,數(shù)據(jù)作為郵件發(fā)給這個帳號
HOME=/ //使用者運行的路徑,這里是根目錄
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小時執(zhí)行/etc/cron.hourly內(nèi)的腳本
02 4 * * * root run-parts /etc/cron.daily //每天執(zhí)行/etc/cron.daily內(nèi)的腳本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期執(zhí)行/etc/cron.weekly內(nèi)的腳本
42 4 1 * * root run-parts /etc/cron.monthly //每月去執(zhí)行/etc/cron.monthly內(nèi)的腳本


posted @ 2008-07-04 01:25 放屁阿狗 閱讀(414) | 評論 (0)編輯 收藏

{
        TCHAR pText[] = _T("\\Windows\\0\\NandFlashPartition\\MediaLib\0\\Storage Card\\MediaLib\0\0");
        CString strText(pText,sizeof(pText));
        SaveMultString(HKEY_LOCAL_MACHINE,_T("Loader"),_T("SystemPath"),strText,sizeof(pText));

        DeleteKey(HKEY_LOCAL_MACHINE,_T("SOFTWARE\\sample\\PLAY"));
    }
posted @ 2008-07-04 01:24 放屁阿狗 閱讀(1569) | 評論 (0)編輯 收藏

cpio(copy in/out)

功能說明:備份文件。

語  法:cpio [-0aABckLovV][-C <輸入/輸出大小>][-F <備份檔>][-H <備份格式>][-O <備份檔>][--block-size= <區(qū)塊大小>][--force-local][--help][--quiet][--version] 或 cpio [- bBcdfikmnrsStuvV][-C <輸入/輸出大小>][-E <范本文件>][-F <備份檔>][- H <備份格式>][-I <備份檔>][-M <回傳信息>][-R <擁有者><: /.><所屬群組>][--block-size=<區(qū)塊大小>][--force-local][--help][-- no-absolute-filenames][--no-preserve-owner][--only-verify-crc][--quiet][- -sparse][--version][范本樣式...] 或 cpio [-0adkiLmpuvV][-R <擁有者><: /.><所屬群組>][--help][--no-preserve-owner][--quiet][--sparse][-- version][目的目]

補充說明:cpio是用來建立,還原備份檔的工具程序,它可以加入,解開cpio或tra備份檔內(nèi)的文件。

參  數(shù):
 -0或--null  接受新增列控制字符,通常配合find指令的"-print0"參數(shù)使用。
 -a或--reset-access-time  重新設(shè)置文件的存取時間。
 -A或--append  附加到已存在的備份檔中,且這個備份檔必須存放在磁盤上,而不能放置于磁帶機里。
 -b或--swap  此參數(shù)的效果和同時指定"-sS"參數(shù)相同。
 -B  將輸入/輸出的區(qū)塊大小改成5210 Bytes。
 -c  使用舊ASCII備份格式。
 -C<區(qū)塊大小>或--io-size=<區(qū)塊大小>  設(shè)置輸入/輸出的區(qū)塊大小,單位是Byte。
 -d或--make-directories  如有需要cpio會自行建立目錄。
 -E<范本文件>或--pattern-file=<范本文件>  指定范本文件,其內(nèi)含有一個或多個范本樣式,讓cpio解開符合范本條件的文件,格式為每列一個范本樣式。
 -f或--nonmatching  讓cpio解開所有不符合范本條件的文件。
 -F<備份檔>或--file=<備份檔>  指定備份檔的名稱,用來取代標準輸入或輸出,也能借此通過網(wǎng)絡(luò)使用另一臺主機的保存設(shè)備存取備份檔。
 -H<備份格式>  指定備份時欲使用的文件格式。
 -i或--extract  執(zhí)行copy-in模式,還原備份檔。
 -l<備份檔>  指定備份檔的名稱,用來取代標準輸入,也能借此通過網(wǎng)絡(luò)使用另一臺主機的保存設(shè)備讀取備份檔。
 -k  此參數(shù)將忽略不予處理,僅負責(zé)解決cpio不同版本間的兼容性問題。
 -l或--link  以硬連接的方式取代復(fù)制文件,可在copy-pass模式下運用。
 -L或--dereference  不建立符號連接,直接復(fù)制該連接所指向的原始文件。
 -m或preserve-modification-time  不去更換文件的更改時間。
 -M<回傳信息>或--message=<回傳信息>  設(shè)置更換保存媒體的信息。
 -n或--numeric-uid-gid  使用"-tv"參數(shù)列出備份檔的內(nèi)容時,若再加上參數(shù)"-n",則會以用戶識別碼和群組識別碼替代擁有者和群組名稱列出文件清單。
 -o或--create  執(zhí)行copy-out模式,建立備份檔。
 -O<備份檔>  指定備份檔的名稱,用來取代標準輸出,也能借此通過網(wǎng)絡(luò) 使用另一臺主機的保存設(shè)備存放備份檔。
 -p或--pass-through  執(zhí)行copy-pass模式,略過備份步驟,直接將文件復(fù)制到目的目錄。
 -r或--rename  當有文件名稱需要更動時,采用互動模式。
 -R<擁有者><:/.><所屬群組>或
 ----owner<擁有者><:/.><所屬群組>  在copy-in模式還原備份檔,或copy-pass模式復(fù)制文件時,可指定這些備份,復(fù)制的文件的擁有者與所屬群組。
 -s或--swap-bytes  交換每對字節(jié)的內(nèi)容。
 -S或--swap-halfwords  交換每半個字節(jié)的內(nèi)容。
 -t或--list  將輸入的內(nèi)容呈現(xiàn)出來。
 -u或--unconditional  置換所有文件,不論日期時間的新舊與否,皆不予詢問而直接覆蓋。
 -v或--verbose  詳細顯示指令的執(zhí)行過程。
 -V或--dot  執(zhí)行指令時,在每個文件的執(zhí)行程序前面加上"."號
 --block-size=<區(qū)塊大小>  設(shè)置輸入/輸出的區(qū)塊大小,假如設(shè)置數(shù)值為5,則區(qū)塊大小為2500,若設(shè)置成10,則區(qū)塊大小為5120,依次類推。
 --force-local  強制將備份檔存放在本地主機。
 --help  在線幫助。
 --no-absolute-filenames  使用相對路徑建立文件名稱。
 --no-preserve-owner  不保留文件的擁有者,誰解開了備份檔,那些文件就歸誰所有。
 -only-verify-crc  當備份檔采用CRC備份格式時,可使用這項參數(shù)檢查備份檔內(nèi)的每個文件是否正確無誤。
 --quiet  不顯示復(fù)制了多少區(qū)塊。
 --sparse  倘若一個文件內(nèi)含大量的連續(xù)0字節(jié),則將此文件存成稀疏文件。
 --version  顯示版本信息。
posted @ 2008-07-04 01:23 放屁阿狗 閱讀(219) | 評論 (0)編輯 收藏

cvs server
===================
1. cvs -d /path/cvsroot init
2. groupadd cvs
3. chgrp -R cvs /path/cvsroot
4. chmod -R ug+rxw /path/cvsroot
5. edit /etc/groups, add cvs-user to cvs group ( cvs:::scott,may)
6. edit /etc/services,add following line:
     cvspserver  ... 2401
7. create /etc/xinetd.d/cvspserver, add following text:
    service cvspserver
    {
        disable = no
        flags           = REUSE
        protocal        = tcp
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/cvs
        server_args     = --allow-root=/home/cvsroot pserver
    }
8. service restart xinetd

cvs client setting
===================
1. vi .bash_profile,add CVSROOT varaible
    CVSROOT=:pserver:user@host#2401:/server/path/cvsroot
2. cvs login
3. cvs import -m="test"  project vendor release_version
4. cvs checkout project   






CVS環(huán)境初始化
============

環(huán)境設(shè)置:指定CVS庫的路徑CVSROOT
tcsh
setenv CVSROOT /path/to/cvsroot
bash
CVSROOT=/path/to/cvsroot ; export CVSROOT

后面還提到遠程CVS服務(wù)器的設(shè)置:
CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH

初始化:CVS版本庫的初始化。
cvs init

一個項目的首次導(dǎo)入
cvs import -m "write some comments here" project_name vendor_tag release_tag
執(zhí)行后:會將所有源文件及目錄導(dǎo)入到/path/to/cvsroot/project_name目錄下
vender_tag: 開發(fā)商標記
release_tag: 版本發(fā)布標記

項目導(dǎo)出:將代碼從CVS庫里導(dǎo)出
cvs checkout project_name
cvs 將創(chuàng)建project_name目錄,并將最新版本的源代碼導(dǎo)出到相應(yīng)目錄中。這個checkout和Virvual SourceSafe中的check out不是一個概念,相對于Virvual SourceSafe的check out是cvs update, check in是cvs commit。

CVS的日常使用 
=============

注意:第一次導(dǎo)出以后,就不是通過cvs checkout來同步文件了,而是要進入剛才cvs checkout project_name導(dǎo)出的project_name目錄下進行具體文件的版本同步(添加,修改,刪除)操作。

將文件同步到最新的版本:
cvs update
不制定文件名,cvs將同步所有子目錄下的文件,也可以制定某個文件名/目錄進行同步
cvs update file_name
最好每天開始工作前或?qū)⒆约旱墓ぷ鲗?dǎo)入到CVS庫里前都要做一次,并養(yǎng)成“先同步 后修改”的習(xí)慣,和Virvual SourceSafe不同,CVS里沒有文件鎖定的概念,所有的沖突是在commit之前解決,如果你修改過程中,有其他人修改并commit到了CVS庫中,CVS會通知你文件沖突,并自動將沖突部分用
>>>>>>
content on cvs server
<<<<<<
content in your file
>>>>>>
標記出來,由你確認沖突內(nèi)容的取舍。
版本沖突一般是在多個人修改一個文件造成的,但這種項目管理上的問題不應(yīng)該指望由CVS來解決。

確認修改寫入到CVS庫里:
cvs commit -m "write some comments here" file_name

注意:CVS的很多動作都是通過cvs commit進行最后確認并修改的,最好每次只修改一個文件。在確認的前,還需要用戶填寫修改注釋,以幫助其他開發(fā)人員了解修改的原因。如果不用寫-m "comments"而直接確認`cvs commit file_name` 的話,cvs會自動調(diào)用系統(tǒng)缺省的文字編輯器(一般是vi)要求你寫入注釋。
注釋的質(zhì)量很重要:所以不僅必須要寫,而且必須寫一些比較有意義的內(nèi)容:以方便其他開發(fā)人員能夠很好的理解
不好的注釋,很難讓其他的開發(fā)人員快速的理解:比如: -m "bug fixed" 甚至 -m ""
好的注釋,甚至可以用中文: -m "在用戶注冊過程中加入了Email地址校驗"

修改某個版本注釋:每次只確認一個文件到CVS庫里是一個很好的習(xí)慣,但難免有時候忘了指定文件名,把多個文件以同樣注釋commit到CVS庫里了,以下命令可以允許你修改某個文件某個版本的注釋:
cvs admin -m 1.3:"write some comments here" file_name

添加文件
創(chuàng)建好新文件后,比如:touch new_file
cvs add new_file
注意:對于圖片,Word文檔等非純文本的項目,需要使用cvs add -b選項,否則有可能出現(xiàn)文件被破壞的情況
比如:cvs add -kb new_file.gif
然后確認修改并注釋
cvs ci -m "write some comments here"

刪除文件:
將某個源文件物理刪除后,比如:rm file_name
cvs rm file_name
然后確認修改并注釋
cvs ci -m "write some comments here"
以上面前2步合并的方法為:
cvs rm -f file_name
cvs ci -m "why delete file"

注意:很多cvs命令都有縮寫形式:commit=>ci; update=>up; checkout=>co; remove=>rm;


添加目錄:
cvs add dir_name

查看修改歷史:cvs log file_name
cvs history file_name

查看當前文件不同版本的區(qū)別
cvs diff -r1.3 -r1.5 file_name
查看當前文件(可能已經(jīng)修改了)和庫中相應(yīng)文件的區(qū)別
cvs diff file_name
cvs的web界面提供了更方便的定位文件修改和比較版本區(qū)別的方法,具體安裝設(shè)置請看后面的cvsweb使用

正確的通過CVS恢復(fù)舊版本的方法:
如果用cvs update -r1.2 file.name
這個命令是給file.name加一個STICK TAG: "1.2" ,雖然你的本意只是想將它恢復(fù)到1.2版本
正確的恢復(fù)版本的方法是:cvs update -p -r1.2 file_name >file_name
如果不小心已經(jīng)加成STICK TAG的話:用cvs update -A 解決

移動文件:文件重命名
cvs里沒有cvs move或cvs rename,因為這兩個操作是先cvs remove old_file_name,然后cvs add new_file_name實現(xiàn)的。

刪除,移動目錄:
最方便的方法是讓管理員直接移動,刪除CVSROOT里相應(yīng)目錄(因為CVS一個項目下的子目錄都是獨立的,移動到$CVSROOT目錄下都可以作為新的獨立項目:好比一顆樹,其實砍下任意一枝都能獨立存活),對目錄進行了修改后,要求其開發(fā)人員重新導(dǎo)出項目cvs checkout project_name 或者用cvs update -dP同步。

CVS Branch:項目多分支同步開發(fā)
=============================

確認版本里程碑:多個文件各自版本號不一樣,項目到一定階段,可以給所有文件統(tǒng)一指定一個階段里程碑版本號,方便以后按照這個階段里程碑版本號導(dǎo)出項目,同時也是項目的多個分支開發(fā)的基礎(chǔ)。
cvs tag release_1_0

開始一個新的里程碑:
cvs commit -r 2 標記所有文件開始進入2.x的開發(fā)

注意:CVS里的revsion和軟件包的發(fā)布版本可以沒有直接的關(guān)系。但所有文件使用和發(fā)布版本一致的版本號比較有助于維護。

在開發(fā)項目的2.x版本的時候發(fā)現(xiàn)1.x有問題,但2.x又不敢用,則從先前標記的里程碑:release_1_0導(dǎo)出一個分支release_1_0_patch
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir

一些人先在另外一個目錄下導(dǎo)出release_1_0_patch這個分支:解決1.0中的緊急問題,
cvs checkout -r release_1_0_patch
而其他人員仍舊在項目的主干分支2.x上開發(fā)

在release_1_0_patch上修正錯誤后,標記一個1.0的錯誤修正版本號
cvs tag release_1_0_patch_1

如果2.0認為這些錯誤修改在2.0里也需要,也可以在2.0的開發(fā)目錄下合并release_1_0_patch_1中的修改到當前代碼中:
cvs update -j release_1_0_patch_1

CVS的遠程認證:通過SSH遠程訪問CVS
================================

使用cvs本身的遠程認證很麻煩,需要定義服務(wù)器和用戶組,用戶名,設(shè)置密碼等,而且不安全,因此和系統(tǒng)本地帳號認證并通過SSH傳輸是比較好的辦法,通過在客戶機的/etc/profile里設(shè)置一下內(nèi)容:
CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH
所有客戶機所有本地用戶都可以映射到CVS服務(wù)器相應(yīng)同名帳號了。

如果CVS所在服務(wù)器的SSH端口不在缺省的22,或者和客戶端與CVS服務(wù)器端SSH缺省端口不一致,有時候設(shè)置了:
:ext:$USER@test.server.address#port:/path/to/cvsroot

仍然不行,比如有以下錯誤信息:
ssh: test.server.address#port: Name or service not known
cvs [checkout aborted]: end of file from server (consult above messages if any)

解決的方法是做一個腳本指定端口轉(zhuǎn)向(不能使用alias,會出找不到文件錯誤):
創(chuàng)建一個/usr/bin/ssh_cvs文件:
#!/usr/bin/sh
/path/to/ssh -p 34567 "$@"
然后:chmod +x /usr/bin/ssh_cvs
并CVS_RSH=ssh_cvs; export CVS_RSH

注意:port是指相應(yīng)服務(wù)器SSH的端口,不是cvs pserver的端口

CVSWEB:提高程序員比較文件修改效率
================================

CVSWEB就是CVS的WEB界面,可以大大提高程序員定位修改的效率:
使用的樣例可以看:http://www.freebsd.org/cgi/cvsweb.cgi

CVSWEB的下載:CVSWEB從最初的版本已經(jīng)演化出很多功能界面更豐富的版本,這個是個人感覺覺得安裝設(shè)置比較方便的:
http://www.spaghetti-code.de/software/linux/cvsweb/

下載解包:
tar zxf cvsweb.tgz
把配置文件cvsweb.conf放到安全的地方(比如和apache的配置放在同一個目錄下),
修改:cvsweb.cgi讓CGI找到配置文件:
$config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';

轉(zhuǎn)到/path/to/apache/conf下并修改cvsweb.conf:

   1. 修改CVSROOT路徑設(shè)置:
      %CVSROOT = (
      'Development' => '/path/to/cvsroot', #<==修改指向本地的CVSROOT
      );
   2. 缺省不顯示已經(jīng)刪除的文檔:
      "hideattic" => "1",#<==缺省不顯示已經(jīng)刪除的文檔
   3. 在配置文件cvsweb.conf中還可以定制頁頭的描述信息,你可以修改$long_intro成你需要的文字

CVSWEB可不能隨便開放給所有用戶,因此需要使用WEB用戶認證:
先生成 passwd:
/path/to/apache/bin/htpasswd -c cvsweb.passwd user

修改httpd.conf: 增加
<Directory "/path/to/apache/cgi-bin/cvsweb/">
AuthName "CVS Authorization"
AuthType Basic
AuthUserFile /path/to/cvsweb.passwd
require valid-user
</Directory>

CVS TAGS: who? when?
====================

將$Id$ 加在程序文件開頭的注釋里是一個很好的習(xí)慣,cvs能夠自動解釋更新其中的內(nèi)容成:file_name version time user_name 的格式,比如:cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp,可以這些信息了解文件的最后修改人和修改時間

幾個常用的缺省文件:
default.php
<?php
/*
* Copyright (c) 2002 Company Name.
* $Header$
*/

?>

====================================
Default.java: 注意文件頭一般注釋用 /* 開始 JAVADOC注釋用 /** 開始的區(qū)別
/*
* Copyright (c) 2002 Company Name.
* $Header$
*/

package com.netease;

import java.io;

/**
* comments here
*/
public class Default {
    /**
    *
    * @param
    * @return
    */
    public toString() {

    }
}

====================================
default.pl:
#!/usr/bin/perl -w
# Copyright (c) 2002 Company Name.
# $Header$

# file comments here

use strict;

CVS vs VSS 
===========

CVS沒有文件鎖定模式,VSS在check out同時,同時記錄了文件被導(dǎo)出者鎖定。

CVS是update commit, VSS是check out check in

在CVS中,標記自動更新功能缺省是打開的,這樣也帶來一個潛在的問題,就是不用-kb方式添加binary文件的話在cvs自動更新時可能會導(dǎo)致文件失效。

Virsual SourceSafe中這個功能稱之為Keyword Explaination,缺省是關(guān)閉的,需要通過OPITION打開,并指定需要進行源文件關(guān)鍵詞掃描的類型:*.txt,*.java,*.html...

對于Virsual SourceSafe和CVS都通用的TAG有:
$Header$
$Author$
$Date$
$Revision$

盡量使用通用的關(guān)鍵詞保證代碼在CVS和VSS都能方便的跟蹤。

 
posted @ 2008-07-04 01:22 放屁阿狗 閱讀(259) | 評論 (0)編輯 收藏

網(wǎng)絡(luò)用戶有時候會遇到需要下載一批文件的情況,有時甚至需要把整個網(wǎng)站下載下來或者制作網(wǎng)站的鏡像。在Windows下的用戶都比較熟悉Teleport,webzip等等網(wǎng)站下載工具,實際上AIX中也完全可以做到這樣的功能,那就是利用wget工具。wget是一個命令行工具,用來下載網(wǎng)絡(luò)文件或者整個網(wǎng)站,它具有自動重試、斷點續(xù)傳、支持代理服務(wù)器等等強大的功能。它可以完全替代ftp客戶端。wget是在Linux下開發(fā)的開放源代碼的軟件,作者是Hrvoje Niksic,后來被移植到包括Windows在內(nèi)的各個平臺上。IBM在AIX Linux Toolbox中也提供了這個工具,使得它可以在AIX下運行。您可以在IBM網(wǎng)站http://www-1.ibm.com/servers/aix/products/aixos/linux/altlic.html下載到它。IBM提供的wget是1.8.1版本,rpm包格式的。
wget雖然功能強大,但是使用起來還是比較簡單的,基本的語法是:wget [參數(shù)列表] URL。下面就結(jié)合具體的例子來說明一下wget的用法。
1、下載整個http或者ftp站點。
wget http://place.your.url/here
這個命令可以將http://place.your.url/here 首頁下載下來。使用-x會強制建立服務(wù)器上一模一樣的目錄,如果使用-nd參數(shù),那么服務(wù)器上下載的所有內(nèi)容都會加到本地當前目錄。
wget -r http://place.your.url/here
這個命令會按照遞歸的方法,下載服務(wù)器上所有的目錄和文件,實質(zhì)就是下載整個網(wǎng)站。這個命令一定要小心使用,因為在下載的時候,被下載網(wǎng)站指向的所有地址同樣會被下載,因此,如果這個網(wǎng)站引用了其他網(wǎng)站,那么被引用的網(wǎng)站也會被下載下來!基于這個原因,這個參數(shù)不常用。可以用-l number參數(shù)來指定下載的層次。例如只下載兩層,那么使用-l 2。
要是您想制作鏡像站點,那么可以使用-m參數(shù),例如:
wget -m http://place.your.url/here
這時wget會自動判斷合適的參數(shù)來制作鏡像站點。此時,wget會登錄到服務(wù)器上,讀入robots.txt并按robots.txt的規(guī)定來執(zhí)行。
2、斷點續(xù)傳。
當文件特別大或者網(wǎng)絡(luò)特別慢的時候,往往一個文件還沒有下載完,連接就已經(jīng)被切斷,此時就需要斷點續(xù)傳。wget的斷點續(xù)傳是自動的,只需要使用-c參數(shù),例如:
wget -c http://the.url.of/incomplete/file
使用斷點續(xù)傳要求服務(wù)器支持斷點續(xù)傳。-t參數(shù)表示重試次數(shù),例如需要重試100次,那么就寫-t 100,如果設(shè)成-t 0,那么表示無窮次重試,直到連接成功。-T參數(shù)表示超時等待時間,例如-T 120,表示等待120秒連接不上就算超時。
3、批量下載。
如果有多個文件需要下載,那么可以生成一個文件,把每個文件的URL寫一行,例如生成文件download.txt,
然后用命令:
wget -i download.txt
這樣就會把download.txt里面列出的每個URL都下載下來。(如果列的是文件就下載文件,如果列的是網(wǎng)站,那么下載首頁)
4、選擇性的下載。
可以指定讓wget只下載一類文件,或者不下載什么文件。例如:
wget -m --reject=gif http://target.web.site/subdirectory
表示下載http://target.web.site/subdirectory,但是忽略gif文件。--accept=LIST 可以接受的文件類型,--reject=LIST拒絕接受的文件類型。
5、密碼和認證。
wget只能處理利用用戶名/密碼方式限制訪問的網(wǎng)站,可以利用兩個參數(shù):
--http-user=USER設(shè)置HTTP用戶
--http-passwd=PASS設(shè)置HTTP密碼
對于需要證書做認證的網(wǎng)站,就只能利用其他下載工具了,例如curl。
6、利用代理服務(wù)器進行下載。
如果用戶的網(wǎng)絡(luò)需要經(jīng)過代理服務(wù)器,那么可以讓wget通過代理服務(wù)器進行文件的下載。此時需要在當前用戶的目錄下創(chuàng)建一個.wgetrc文件。文件中可以設(shè)置代理服務(wù)器:
http-proxy = 111.111.111.111:8080
ftp-proxy = 111.111.111.111:8080
分別表示http的代理服務(wù)器和ftp的代理服務(wù)器。如果代理服務(wù)器需要密碼則使用:
--proxy-user=USER設(shè)置代理用戶
--proxy-passwd=PASS設(shè)置代理密碼
這兩個參數(shù)。
使用參數(shù)--proxy=on/off 使用或者關(guān)閉代理。
wget還有很多有用的功能,需要用戶去挖掘。
備注:wget是免費軟件,IBM公司不對wget提供軟件維護和技術(shù)支持。
posted @ 2008-07-04 01:21 放屁阿狗 閱讀(479) | 評論 (0)編輯 收藏

curl是一個利用URL語法在命令行方式下工作的文件傳輸工具。它支持很多協(xié)議:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同樣支持HTTPS認證,HTTP POST方法, HTTP PUT方法, FTP上傳, kerberos認證, HTTP上傳, 代理服務(wù)器, cookies, 用戶名/密碼認證, 下載文件斷點續(xù)傳, 上載文件斷點續(xù)傳, http代理服務(wù)器管道( proxy tunneling), 甚至它還支持IPv6, socks5代理服務(wù)器, 通過http代理服務(wù)器上傳文件到FTP服務(wù)器等等,功能十分強大。Windows操作系統(tǒng)下的網(wǎng)絡(luò)螞蟻,網(wǎng)際快車(FlashGet)的功能它都可以做到。準確的說,curl支持文件的上傳和下載,所以是一個綜合傳輸工具,但是按照傳統(tǒng),用戶習(xí)慣稱curl為下載工具。
curl是瑞典curl組織開發(fā)的,您可以訪問http://curl.haxx.se/獲取它的源代碼和相關(guān)說明。鑒于curl在Linux上的廣泛使用,IBM在AIX Linux Toolbox的光盤中包含了這個軟件,并且您可以訪問IBM網(wǎng)站http://www-1.ibm.com/servers/aix/products/aixos/linux/altlic.html下載它。curl的最新版本是7.10.8,IBM網(wǎng)站上提供的版本為7.9.3。在AIX下的安裝很簡單,IBM網(wǎng)站上下載的rpm格式的包。
在http://curl.haxx.se/docs/,您可以下載到UNIX格式的man幫助,里面有詳細的curl工具的使用說明。curl的用法為:curl [options] [URL...] 其中options是下載需要的參數(shù),大約有80多個,curl的各個功能完全是依靠這些參數(shù)完成的。具體參數(shù)的使用,用戶可以參考curl的man幫助。
下面,本文就將結(jié)合具體的例子來說明怎樣利用curl進行下載。
1、獲得一張頁面
使用命令:curl http://curl.haxx.se
這是最簡單的使用方法。用這個命令獲得了http://curl.haxx.se指向的頁面,同樣,如果這里的URL指向的是一個文件或者一幅圖都可以直接下載到本地。如果下載的是HTML文檔,那么缺省的將不顯示文件頭部,即HTML文檔的header。要全部顯示,請加參數(shù) -i,要只顯示頭部,用參數(shù) -I。任何時候,可以使用 -v 命令看curl是怎樣工作的,它向服務(wù)器發(fā)送的所有命令都會顯示出來。為了斷點續(xù)傳,可以使用-r參數(shù)來指定傳輸范圍。
2、表單(Form)的獲取
在WEB頁面設(shè)計中,form是很重要的元素。Form通常用來收集并向網(wǎng)站提交信息。提交信息的方法有兩種,GET方法和POST方法。先討論GET方法,例如在頁面中有這樣一段:
<form method="GET" action="junk.cgi">
<input type=text name="birthyear">
<input type=submit name=press value="OK">
</form>
那么瀏覽器上會出現(xiàn)一個文本框和一個標為“OK”的按鈕。按下這個按鈕,表單就用GET方法向服務(wù)器提交文本框的數(shù)據(jù)。例如原始頁面是在www.hotmail.com/when/birth.html看到的,然后您在文本框中輸入1905,然后按OK按鈕,那么瀏覽器的URL現(xiàn)在應(yīng)該是:“www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK”
對于這種網(wǎng)頁,curl可以直接處理,例如想獲取上面的網(wǎng)頁,只要輸入:
curl "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"
就可以了。
表單用來提交信息的第二種方法叫做POST方法,POST方法和GET方法的區(qū)別在于GET方法使用的時候,瀏覽器中會產(chǎn)生目標URL,而POST不會。類似GET,這里有一個網(wǎng)頁:
<form method="POST" action="junk.cgi">
<input type=text name="birthyear">
<input type=submit name=press value="OK">
</form>
瀏覽器上也會出現(xiàn)一個文本框和一個標為“OK”的按鈕。按下這個按鈕,表單用POST方法向服務(wù)器提交數(shù)據(jù)。這時的URL是看不到的,因此需要使用特殊的方法來抓取這個頁面:
curl -d "birthyear=1905&press=OK" www.hotmail.com/when/junk.cgi
這個命令就可以做到。
1995年年末,RFC 1867定義了一種新的POST方法,用來上傳文件。主要用于把本地文件上傳到服務(wù)器。此時頁面是這樣寫的:
<form method="POST" enctype='multipart/form-data' action="upload.cgi">
<input type=file name=upload>
<input type=submit name=press value="OK">
</form>
對于這種頁面,curl的用法不同:
curl -F upload=@localfilename -F press=OK [URL]
這個命令的實質(zhì)是將本地的文件用POST上傳到服務(wù)器。有關(guān)POST還有不少用法,用戶可以自己摸索。
3、使用PUT方法。
HTTP協(xié)議文件上傳的標準方法是使用PUT,此時curl命令使用-T參數(shù):
curl -T uploadfile www.uploadhttp.com/receive.cgi
4、有關(guān)認證。
curl可以處理各種情況的認證頁面,例如下載用戶名/密碼認證方式的頁面(在IE中通常是出現(xiàn)一個輸入用戶名和密碼的輸入框):
curl -u name:password www.secrets.com
如果網(wǎng)絡(luò)是通過http代理服務(wù)器出去的,而代理服務(wù)器需要用戶名和密碼,那么輸入:
curl -U proxyuser:proxypassword http://curl.haxx.se
任何需要輸入用戶名和密碼的時候,只在參數(shù)中指定用戶名而空著密碼,curl可以交互式的讓用戶輸入密碼。
5、引用。
有些網(wǎng)絡(luò)資源訪問的時候必須經(jīng)過另外一個網(wǎng)絡(luò)地址跳轉(zhuǎn)過去,這用術(shù)語來說是:referer,引用。對于這種地址的資源,curl也可以下載:
curl -e http://curl.haxx.se daniel.haxx.se
6、指定用戶客戶端。
有些網(wǎng)絡(luò)資源首先需要判斷用戶使用的是什么瀏覽器,符合標準了才能夠下載或者瀏覽。此時curl可以把自己“偽裝”成任何其他瀏覽器:
curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" [URL]
這個指令表示curl偽裝成了IE5.0,用戶平臺是Windows 2000。(對方服務(wù)器是根據(jù)這個字串來判斷客戶端的類型的,所以即使使用AIX也無所謂)。使用:
curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" [URL]
此時curl變成了Netscape,運行在PIII平臺的Linux上了。
7、COOKIES
Cookie是服務(wù)器經(jīng)常使用的一種記憶客戶信息的方法。如果cookie被記錄在了文件中,那么使用命令:
curl -b stored_cookies_in_file www.cookiesite.com
curl可以根據(jù)舊的cookie寫出新cookie并發(fā)送到網(wǎng)站:
curl -b cookies.txt -c newcookies.txt www.cookiesite.com
8、加密的HTTP――HTTPS。
如果是通過OpenSSL加密的https協(xié)議傳輸?shù)木W(wǎng)頁,curl可以直接訪問:
curl https://that.secure.server.com
9、http認證。
如果是采用證書認證的http地址,證書在本地,那么curl這樣使用:
curl -E mycert.pem https://that.secure.server.com

參考讀物和注意事項:curl非常博大,用戶要想使用好這個工具,除了詳細學(xué)習(xí)參數(shù)之外,還需要深刻理解http的各種協(xié)議與URL的各個語法。這里推薦幾個讀物:
RFC 2616 HTTP協(xié)議語法的定義。
RFC 2396 URL語法的定義。
RFC 2109 Cookie是怎樣工作的。
RFC 1867 HTTP如何POST,以及POST的格式。
curl是免費軟件,IBM公司對curl不提供技術(shù)支持。


posted @ 2008-07-04 01:21 放屁阿狗 閱讀(1143) | 評論 (0)編輯 收藏

Doxygen是基于GPL的開源項目,是一個非常優(yōu)秀的文檔系統(tǒng),當前支持在大多數(shù)unix(包括linux),windows家族,Mac系統(tǒng)上運行,完全支持C++, C, Java, IDL(Corba和Microsoft 家族)語言,部分支持PHP和C#語言,輸出格式包括HTML、latex、RTF、ps、PDF、壓縮的HTML和unix manpage。有很多開源項目(包括前兩篇文章介紹的log4cpp和CppUnit)都使用了doxygen文檔系統(tǒng)。而國內(nèi)的開發(fā)人員卻使用的不多,這里從開發(fā)人員使用的角度介紹這個工具,使開發(fā)人員用最少的代價盡快掌握這種技術(shù),并結(jié)合這個工具探討如何撰寫注釋的問題。以下以linux下的C+ +語言為例進行介紹,以下討論基于doxygen1.3.3。

1. doxygen使用步驟
由于只是工具的使用,這里不介紹它的原理,直接從使用步驟開始。Doxygen的使用步驟非常簡單。主要可以分為:
 1)第一次使用需要安裝doxygen的程序
 2)生成doxygen配置文件
 3)編碼時,按照某種格式編寫注釋
 4)生成對應(yīng)文檔
doxygen的安裝非常簡單, linux下可以直接下載安裝包運行即可,下載源代碼編譯安裝也是比較通用的編譯安裝命令。請參考其安裝文檔完成安裝。

Doxygen在生成文檔時可以定義項目屬性以及文檔生成過程中的很多選項,使用下面命令能夠產(chǎn)生一個缺省的配置文件:
doxygen -g  [配置文件名]
可以根據(jù)項目的具體需求修改配置文件中對應(yīng)的項,具體的修改過程在下面介紹。修改過的配置文件可以作為以后項目的模板。

讓doxygen自動產(chǎn)生文檔,平常的注釋風(fēng)格可不行,需要遵循doxygen自己的格式。具體如何寫doxygen認識的注釋在第3節(jié)詳細介紹。

OK,代碼編完了,注釋也按照格式寫好了,最后的文檔是如何的哪?非常簡單,運行下面的命令,相應(yīng)的文檔就會產(chǎn)生在指定的目錄中。
  doxygen [配置文件名]

需要注意的是doxygen并不處理所有的注釋,doxygen重點關(guān)注與程序結(jié)構(gòu)有關(guān)的注釋,比如:文件、類、結(jié)構(gòu)、函數(shù)、變量、宏等注釋,而忽略函數(shù)內(nèi)變量、代碼等的注釋。

2. doxygen配置文件
doxygen配置文件的格式是也是通常的unix下配置文件的格式:注釋'#'開始;tag = value [,value2…];對于多值的情況可以使用 tag += value [,value2…]。

對doxygen的配置文件的修改分為兩類:一種就是輸出選項,控制如何解釋源代碼、如何輸出;一種就是項目相關(guān)的信息,比如項目名稱、源代碼目錄、輸出文檔目錄等。對于第一種設(shè)置好后,通常所有項目可以共用一份配置,而后一種是每個項目必須設(shè)置的。下面選擇重要的,有可能需要修改的選項進行解釋說明,其他選項在配置文件都有詳細解釋。

TAG 缺省值 含義
PROJECT_NAME  項目名稱
PROJECT_NUMBER  可以理解為版本信息
OUTPUT_DIRECTORY  輸出文件到的目錄,相對目錄(doxygen運行目錄)或者絕對目錄
INPUT  代碼文件或者代碼所在目錄,使用空格分割
FILE_PATTERNS *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp *.h++ *.idl *.odl 指定INPUT的目錄中特定文件,如:*.cpp *.c *.h
RECURSIVE NO 是否遞歸INPUT中目錄的子目錄
EXCLUDE  在INPUT目錄中需要忽略的子目錄
EXCLUDE_PATTERNS  明確指定的在INPUT目錄中需要忽略的文件,如:FromOut*.cpp
 
OUTPUT_LANGUAGE English 生成文檔的語言,當前支持2、30種語言,國內(nèi)用戶可以設(shè)置為Chinese
USE_WINDOWS_ENCODING YES(win版本)
NO(unix版本) 編碼格式,默認即可。
EXTRACT_ALL NO 為NO,只解釋有doxygen格式注釋的代碼;為YES,解析所有代碼,即使沒有注釋。類的私有成員和所有的靜態(tài)項由EXTRACT_PRIVATE和 EXTRACT_STATIC控制
EXTRACT_PRIVATE NO 是否解析類的私有成員
EXTRACT_STATIC NO 是否解析靜態(tài)項
EXTRACT_LOCAL_CLASSES YES 是否解析源文件(cpp文件)中定義的類
SOURCE_BROWSER NO 如果為YES,源代碼文件會被包含在文檔中
INLINE_SOURCES NO 如果為YES,函數(shù)和類的實現(xiàn)代碼被包含在文檔中
ALPHABETICAL_INDEX NO 生成一個字母序的列表,有很多類、結(jié)構(gòu)等項時建議設(shè)為YES
GENERATE_HTML YES 是否生成HTML格式文檔
GENERATE_HTMLHELP NO 是否生成壓縮HTML格式文檔(.chm)
GENERATE_LATEX YES 是否乘車latex格式的文檔
GENERATE_RTF NO 是否生成RTF格式的文檔
GENERATE_MAN NO 是否生成man格式文檔
GENERATE_XML NO 是否生成XML格式文檔
 

3. doxygen注釋
3.1 注釋風(fēng)格
下面是工作量最大部分,安裝doxygen格式寫注釋。通常代碼可以附上一個注釋塊來對代碼進行解釋,一個注釋塊由一行或者多行組成。通常一個注釋塊包括一個簡要說明(brief)和一個詳細說明(detailed),這兩部分都是可選的。可以有多種方式標識出doxygen可識別的注釋塊。
1)JavaDoc類型的多行注釋。
/**
 *  ….text….
 */
2)QT樣式的多行注釋。
/*!
….text….
 */
3) /// …text….
4) //! …text….
簡要說明有多種方式標識,這里推薦使用@brief命令強制說明,例如:
/**
 * @brief [some brief description ]
 *      [ brief description more. ]
 *
 * [some more detailed description…]
 */
以上這些注釋格式用來對緊跟其后的代碼進行注釋。doxygen也允許把注釋放到代碼后面,具體格式是放一個'<'到注釋開始部分。例如:
int var1 ; /**< ….text…. */
int var2; ///< ….text….

注釋和代碼完全分離,放在其他地方也是允許的,但需要使用特殊的命令加上名稱或者聲明進行標識,比如:class、struct、union、 enum、fn、var、def、file、namespace、package、interface(這些也就是doxygen關(guān)注的注釋類型)。這里不推薦使用,建議注釋盡量放在代碼前后。具體使用方式參見doxygen手冊。

3.2 doxygen常用注釋格式
通常的選擇上面的一、兩種注釋風(fēng)格,遇到頭文件中各種類型定義,關(guān)鍵變量、宏的定義,在其前或者后使用 @brief 定義其簡要說明,空一行后繼續(xù)寫其詳細的注釋即可。

對函數(shù)的注釋,是比較常常需要注釋的部分。除了定義其簡要說明以及詳細注釋,還可以使用param命令對其各個參數(shù)進行注釋,使用return命令對返回值進行注釋。常見的格式如下:
/**
 *@brief func's brief comment.
 *
 * Some detailed comment.
 *@param a [param a 's comment.]
 *@param b [param b 's comment.]
 *@exception std::out_of_range [exception's comment.]
 *@return [return's comment.]
 */
int func1(int a, int b);

進行設(shè)計時,通常有模塊的概念,一個模塊可能有多個類或者函數(shù)組成,完成某個特定功能的代碼的集合。如何對這個概念進行注釋?doxygen提供了group的概念,生成的模塊的注釋會單獨放在一個模塊的頁面中。使用下面的格式定義一個group。
/** [group_name] [brief group description ]
 * detailed group description ]
 * @{
*/
code
/** @} */
group中的代碼可以有自己的注釋。單純定義一個模塊,去除{ 和}命令即可。任何其他代碼項(比如類、函數(shù)、甚至文件)如果要加入到某個模塊,可以在其doxygen注釋中使用ingroup命令即可。Group之間使用ingroup命令,可以組成樹狀關(guān)系。
/** @file util.cpp
* @ingroup [group_name]
 * @brief file's brief info.
 */
把多個代碼項一起添加到某個模塊中可以使用addtogroup命令,格式和defgroup相似。

對于某幾個功能類似的代碼項(比如類、函數(shù)、變量)等,如果希望一起添加注釋,而又不想提升到模塊的概念,可以通過下面的方式:
//@{
/** Comments for all below code. */
code…
//@}
對這種組進行命名可以使用name命令。此時中間代碼可以有自己的注釋。如:
/** @name group_name
 * description for group.
 */
//@{
code…
//@}

3.3 doxygen常用注釋命令
doxygen通過注釋命令識別注釋中需要特殊處理的注釋,比如函數(shù)的參數(shù)、返回值進行突出顯示。上面也提到了一些注釋命令(如:brief、param、return、以及group相關(guān)的命令),下面對其他一些常用的注釋命令進行解釋說明。
@exception <exception-object> {exception description} 對一個異常對象進行注釋。
@warning {warning message } 一些需要注意的事情
@todo { things to be done }  對將要做的事情進行注釋
@see {comment with reference to other items } 一段包含其他部分引用的注釋,中間包含對其他代碼項的名稱,自動產(chǎn)生對其的引用鏈接。
@relates <name> 通常用做把非成員函數(shù)的注釋文檔包含在類的說明文檔中。
@since {text} 通常用來說明從什么版本、時間寫此部分代碼。
@deprecated
@pre { description of the precondition } 用來說明代碼項的前提條件。
@post { description of the postcondition } 用來說明代碼項之后的使用條件。
@code 在注釋中開始說明一段代碼,直到@endcode命令。
@endcode 注釋中代碼段的結(jié)束。

到此為止,常用的doxygen的注釋格式討論完畢,我們能夠按照一定的格式撰寫doxygen認識的注釋,并能夠使用doxygen方便快捷的生成對應(yīng)的文檔,不過注釋中應(yīng)該寫些什么,如何撰寫有效的注釋可能是困擾開發(fā)人員的一個更深層次的問題。

4. 注釋的書寫
注釋應(yīng)該怎么寫,寫多還是寫少。過多的注釋甚至?xí)蓴_對代碼的閱讀。寫注釋的一個總的原則就是注釋應(yīng)該盡量用來表明作者的意圖,至少也應(yīng)該是對一部分代碼的總結(jié),而不應(yīng)該是對代碼的重復(fù)或者解釋。對代碼的重復(fù)或者解釋的代碼,看代碼可能更容易理解。反映作者意圖的注釋解釋代碼的目的,從解決問題的層次上進行注釋,而代碼總結(jié)性注釋則是從問題的解答的層次上進行注釋。

推薦的寫注釋的過程是首先使用注釋勾勒出代碼的主要框架,然后根據(jù)注釋撰寫相應(yīng)的代碼。對各種主要的數(shù)據(jù)結(jié)構(gòu)、輸出的函數(shù)、多個函數(shù)公用的變量進行詳細地注釋。對代碼中控制結(jié)構(gòu),單一目的的語句集進行注釋。下面是一些寫注釋時需要注意的要點:
  避免對單獨語句進行注釋;
  通過注釋解釋為什么這么做、或者要做什么,使代碼的讀者可以只閱讀注釋理解代碼;
  對讀者可能會有疑問的地方進行注釋;
  對數(shù)據(jù)定義進行注釋,而不是對其使用過程進行注釋;
  對于難于理解的代碼,進行改寫,而不要試圖通過注釋加以說明;
  對關(guān)鍵的控制結(jié)構(gòu)進行注釋;
  對數(shù)據(jù)和函數(shù)的邊界、使用前提等進行注釋;

5. 參考資料
 1. doxygen homepage
 http://www.stack.nl/~dimitri/doxygen/

 2. doxygen manual
 http://www.stack.nl/~dimitri/doxygen/manual.html

 3. Code Complete: A Practical Handbook of Software Construction. Redmond, Wa.: Microsoft Press, 880 pages, 1993. ISBN: 1-55615-484-4.
 
 4. 簡介doxygen
 http://www.stack.nl/~dimitri/doxygen/doxygen_intro_cn.html
 
 5. 10 Minutes to document your code
 http://www.codeproject.com/tips/doxysetup.asp

 6. 使用doxygen
 http://www.csdn.net/Develop/article/16%5C16383.shtm
posted @ 2008-07-04 01:20 放屁阿狗 閱讀(1864) | 評論 (0)編輯 收藏

     摘要: wxlocale 初始化字符語言種類        locale.Init(wxLANGUAGE_CHINESE );//    locale.Init(wxLANGUAGE_FRENCH );    wxLocale::AddCatalogLookupPathPrefix(wx...  閱讀全文
posted @ 2008-07-04 01:19 放屁阿狗 閱讀(1417) | 評論 (0)編輯 收藏

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> bh處理 1.三種舊式的bottom half 處理類型 IMMEDIATE_BH:  driver注冊入tq_immediate隊列,等待調(diào)度 TQUEUE_BH:  &n...  閱讀全文
posted @ 2008-07-04 01:11 放屁阿狗 閱讀(5167) | 評論 (3)編輯 收藏

1.Qgsrenderer 圖層繪制器抽象基類

 每個renderer只能繪制某一種適量圖形對象, Qgsrenderer ::mVectorType 定義了適量圖層類型(QGis::VectorType) ,Qgsrenderer定義了作為一個繪圖器的基本功能接口

 

QgsRasterLayer 通過QgsSingleSymbolRenderer實現(xiàn)矢量對象的繪制

 

2 QgsMapLayer 地圖圖層

 圖層類型: VECTOR,RASTER

2.1 QgsVectorLayer矢量圖層

       QgsVectorLayer對應(yīng)的就是QgsRasterLayer , QgsMapLayer的子類圖層對象僅僅這兩種。

2.2 QgsMapCanvasLayer 畫板圖層

2.3 QgsMapLayerRegistry

       存儲當前所有地圖層對象,提供Layer id查詢MapLayer對象的功能mapLayer(layid)

2.4 QgsMapCanvasLayer

       QgsMapCanvasLayerqgis應(yīng)用層的圖層對象,用于村促跟用戶交互的信息,它并不是Map核心數(shù)據(jù)對象

 

3.QgsFeature

圖層特征對象。QgsFeature包含若干Attribute,一個QgsGeometry對象

 

QgsLine

 QgsLine2QgsPoint構(gòu)成的線段

4. QgsMapRender

QgsMapCanvasMap利用此對象實現(xiàn)繪制,無子類實現(xiàn)。當canvas產(chǎn)生事件,諸如大小調(diào)整、移動、縮放等等請求時,QgsMapCanvas請求QgsMapCanvasMap進行刷新繪制,后者調(diào)用QgsMapRender::render()進行繪制圖層。

Render(){

       QgsMapRender內(nèi)部保留圖層名稱數(shù)組,根據(jù)圖層idQgsMapLayerRegistry中獲取圖層對象,繪制圖層從最底部開始。

      

}

 

5.OgsMapCanvas圖層繪制板

N個圖層是繪制在QgsMapCanvasMap這個對象之上的,這個對象是Qt的繪制對象

QgsMapCanvasMap其實就是提供OgsMapRender的繪制緩沖,最終還是請求QgsMapRender進行圖層繪制。

 

6. QgsProviderRegistry

       Qgis的數(shù)據(jù)源作為一個provider將被登記在QgsProviderRegistry對象中

 

 

創(chuàng)建一個新的矢量圖層

QgsProviderRegistry中查找ogrprovider,創(chuàng)建一個ogr的矢量數(shù)據(jù)空間createEmptyDataSource

QgsOgrProvider作為QgsVectorDataProvider的子類,QgsVectorDataProvider作為接口被其他模塊訪問

new QgsVectorLayer(ogr){

       new QgsSingleSymbolRenderer()

}

 

QgsMapToPixel

       地圖單位到屏幕像素位置的轉(zhuǎn)換,這個操作非常簡單,根據(jù)設(shè)定的每像素地圖大小單位來計算地圖單位(world)到屏幕像素的轉(zhuǎn)換,反之亦然

 

 

QgsProject QgsProjectFileTransformQgsversion

這些類用于qgis項目信息管理之用,項目文件類型名.qgs,格式是xmlQgsProjectFileTransform用于不同版本的qgis的功能文件的轉(zhuǎn)換

 

 

QgsSymbol

這個類一方面是實現(xiàn)繪制圖層類型的IconQgis中如果創(chuàng)建新的line矢量層,則這個層的圖標顯示在層顯示樹的節(jié)點的Icon就是用QgsSymbol繪制產(chǎn)生

另一方面,在編輯矢量圖層時,添加的線段都有兩端的節(jié)點點,QgsSymbol就是繪制這個節(jié)點

 

矢量圖層類型:

    Point,

    Line,

    Polygon,

 

 

QgsMapTip

圖層地標提示。當鼠標在MapCanvas上移動時,MapTip被一個定時器驅(qū)動,這時MapTip將當前地圖坐標作為中心點,圍繞這個點產(chǎn)生一個選擇區(qū)域(  double searchRadius = mpMapCanvas->extent().width() * (QGis::DEFAULT_IDENTIFY_RADIUS / 100.0 );)

這個區(qū)域作為搜尋區(qū)域提交給ogr-provider查找地圖的Feature對象

再找Featrue的可顯示的字段,然后用QToolTip進行顯示。 QToolTip最終是要被替換掉的

 

QgsFieldMap

typedef QMap<int, QgsField> QgsFieldMap;

矢量圖層的對象具有多個屬性,可以在添加編輯對象時設(shè)置這些屬性

 

attributeFields[CmtAttr] = QgsField(attr[CmtAttr], QVariant::String, "text");

以上代碼就可以添加一種屬性類型

 

 

地圖距離單位:

METERS,

FEET,

DEGREES,

 

 

 

Mbr : 可能全稱 Max boundary Rectangle

 

坐標轉(zhuǎn)換:

      1.空間坐標轉(zhuǎn)換: long/lat坐標投影到世界地圖坐標 QgsCoordinateTransform實現(xiàn)】

       2.世界坐標轉(zhuǎn)換到屏幕坐標【QgsMapToPixel實現(xiàn)】

 

//數(shù)學(xué)宏

#define PI 3.1415926

//角度轉(zhuǎn)弧度

#define DEG_TO_RAD(ang) ((ang)*PI/180.0)

//弧度轉(zhuǎn)角度

#define RAD_TO_DEG(rad) ((rad)*180.0/PI)

//取得x~y之間任意一個值

#define RAND_RANGE(x,y) ((x) + rand() % ((y) - (x) + 1)))

 

 

GPX

www.gpsbabel.org 是不同gps日志數(shù)據(jù)的通用解析和轉(zhuǎn)換工具

gps log數(shù)據(jù)分類:

l         Waypoints: 我的行徑上要路過的點。比如我去北京,順便到徐州拜訪朋友,所以途經(jīng)的徐州是我要停留的waypoint

l         Routes 是指所有WayPoint的集合構(gòu)成的線路

l         Tracks 我途經(jīng)的路上所有走過的軌跡點(因該是最多的數(shù)據(jù)量)

WayPointroute我理解為是面向應(yīng)用的,而Track就是基礎(chǔ)數(shù)據(jù),是物理的記錄

看看老外的注釋

> a) waypoint
 
A geopoint with some special tags like name, comment and the like. 
Usually used to mark special locations as your home, a hotel or a 
geocache. Huge collections of gas stations, post boxes, shops and the 
like are called "points of interest" (aka POIs).
 
> b) track
 
A collection of geopoints recorded by your GPS device while traveling. A 
trackpoint doesn't have a name or comment, but it usually has a 
timestamp. This distibguishes a trackpoint from a waypoint.
 
> c) route
 
A collection of waypoints defining the route you want to pass while 
traveling. 

 

posted @ 2008-07-03 23:48 放屁阿狗 閱讀(4549) | 評論 (0)編輯 收藏

僅列出標題
共25頁: First 14 15 16 17 18 19 20 21 22 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久久久久码影片| 一区二区精品在线| 久久青青草综合| 久久狠狠一本精品综合网| 久久国产精品网站| 久久精品日韩欧美| 米奇777超碰欧美日韩亚洲| 美女国内精品自产拍在线播放| 久久久久综合网| 麻豆成人综合网| 欧美日韩国产首页| 国产精品国产三级欧美二区| 国产欧美一区二区视频| 精品动漫3d一区二区三区免费版| 亚洲国产1区| 一区二区三区黄色| 欧美一区91| 欧美激情一区二区三区在线视频观看| 亚洲精品一区二区三区不| 亚洲综合三区| 免费在线国产精品| 国产精品综合视频| 亚洲国产日韩欧美一区二区三区| 亚洲免费高清| 久久久久国色av免费观看性色| 亚洲第一偷拍| 中日韩美女免费视频网址在线观看| 亚洲一区欧美| 欧美暴力喷水在线| 国产欧美精品国产国产专区| 亚洲精品美女久久7777777| 亚洲欧美日韩一区在线观看| 免费精品视频| 亚洲欧美区自拍先锋| 欧美片第一页| 亚洲国产精品ⅴa在线观看| 久久不射中文字幕| 国产综合精品| 亚洲欧美日韩第一区| 99riav国产精品| 香蕉视频成人在线观看| 欧美成人日韩| 香蕉久久夜色精品| 国产精品v欧美精品∨日韩| 狠狠爱综合网| 亚洲综合激情| 亚洲免费精彩视频| 农夫在线精品视频免费观看| 国产日韩欧美综合一区| 亚洲视频第一页| 亚洲国产精品日韩| 久久嫩草精品久久久精品| 国产亚洲欧美色| 欧美影院在线| 亚洲欧美日韩国产另类专区| 欧美日韩在线免费观看| 99精品欧美一区二区三区| 欧美福利网址| 免费成人高清| 亚洲精品极品| 亚洲人午夜精品免费| 男人的天堂亚洲| 最新日韩欧美| 亚洲电影免费在线观看| 嫩草影视亚洲| 99在线精品视频在线观看| 亚洲国产你懂的| 欧美成人首页| 在线视频精品一| 一区二区动漫| 欧美性事在线| 免费毛片一区二区三区久久久| 韩日成人av| 免费成人网www| 美女免费视频一区| 夜夜嗨av一区二区三区四区| 一本大道久久a久久综合婷婷| 欧美三级韩国三级日本三斤| 性久久久久久久久| 久久久久女教师免费一区| 亚洲国产精品女人久久久| 亚洲欧洲精品一区二区三区 | 欧美日韩国产综合在线| 亚洲一区尤物| 久久精品国亚洲| 亚洲精美视频| 亚洲一区日韩在线| 国际精品欧美精品| 亚洲激情一区二区| 国产精自产拍久久久久久| 亚洲一区尤物| 国产午夜久久久久| 亚洲高清123| 国产精品试看| 久久在线免费视频| 欧美日产国产成人免费图片| 久久国产精品一区二区| 欧美99在线视频观看| 亚洲欧美日韩一区二区| 另类av一区二区| 午夜一区二区三区不卡视频| 欧美/亚洲一区| 久久久www免费人成黑人精品| 欧美成人在线影院| 欧美在线一二三四区| 欧美精品成人91久久久久久久| 亚洲欧美中日韩| 欧美插天视频在线播放| 久久福利资源站| 欧美日韩成人在线| 女同一区二区| 国产午夜亚洲精品不卡| 亚洲伦伦在线| 日韩视频在线一区二区| 久久激情五月丁香伊人| 亚洲综合色自拍一区| 欧美成人亚洲| 你懂的国产精品永久在线| 国产精品一区二区三区四区五区| 91久久精品国产91久久性色| 黑丝一区二区| 欧美一区二区三区久久精品茉莉花| aa亚洲婷婷| 欧美激情女人20p| 欧美激情小视频| 亚洲电影免费在线| 亚洲黄色影院| 久久裸体艺术| 久久蜜桃香蕉精品一区二区三区| 国产精品无码永久免费888| 亚洲精品久久久久久一区二区| 亚洲第一区中文99精品| 久久久久看片| 欧美国产亚洲精品久久久8v| 亚洲国产精品99久久久久久久久| 久久亚洲影院| 亚洲国产精品传媒在线观看 | 亚洲裸体俱乐部裸体舞表演av| 久久精品视频在线免费观看| 久久久久久9999| 狠狠色2019综合网| 久久精品女人| 欧美多人爱爱视频网站| 亚洲欧洲精品一区二区三区| 免费亚洲一区| 亚洲精品韩国| 亚洲一区免费在线观看| 国产精品日韩一区二区| 欧美一区二区三区四区在线| 玖玖在线精品| 亚洲看片免费| 国产精品久久久久久久久免费樱桃 | 国产精品xnxxcom| 一区二区精品在线| 亚洲欧美中文在线视频| 国产色综合网| 久久综合伊人77777麻豆| 亚洲成人在线视频网站| 日韩亚洲在线观看| 国产精品露脸自拍| 久久激情一区| 亚洲国产日本| 性欧美videos另类喷潮| 尤物yw午夜国产精品视频| 免费影视亚洲| 亚洲欧美日韩国产中文在线| 麻豆av福利av久久av| 一二三区精品福利视频| 国产欧美精品xxxx另类| 欧美成人精品在线播放| 亚洲一区二区三区四区视频| 久久中文字幕一区| 在线亚洲精品| 亚洲国产精品成人综合| 国产精品毛片| 欧美成在线观看| 亚洲欧美成人在线| 国产女主播一区二区| 欧美成年人网站| 午夜伦理片一区| 亚洲精品一区二区三区蜜桃久| 久久久精品一区| 亚洲小说春色综合另类电影| 狠狠色丁香婷婷综合影院| 欧美三区美女| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲午夜精品国产| 亚洲高清在线| 久久亚洲影音av资源网| 午夜视频在线观看一区二区| 亚洲日韩视频| 亚洲大片一区二区三区| 国产日韩欧美二区| 欧美理论片在线观看| 久久精品日韩欧美| 亚洲欧美一区二区三区久久| 一本色道久久综合狠狠躁的推荐| 欧美成人精品影院| 麻豆成人av| 久久人人爽人人爽|