• <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>

            socketref,再見(jiàn)!高德

            https://github.com/adoggie

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

            常用鏈接

            留言簿(54)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            #

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

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


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

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

            crontab -r //刪除沒(méi)個(gè)用戶的cron服務(wù)

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

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

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

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

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

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

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

            每天早上6點(diǎn)

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

            每?jī)蓚€(gè)小時(shí)

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

            晚上11點(diǎn)到早上8點(diǎn)之間每?jī)蓚€(gè)小時(shí),早上八點(diǎn)

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

            每個(gè)月的4號(hào)和每個(gè)禮拜的禮拜一到禮拜三的早上11點(diǎn)

            0 11 4 * 1-3 command line

            1月1日早上4點(diǎn)

            0 4 1 1 * command line

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

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

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

            SHELL=/bin/bash
            PATH=/sbin:/bin:/usr/sbin:/usr/bin
            MAILTO=root //如果出現(xiàn)錯(cuò)誤,或者有數(shù)據(jù)輸出,數(shù)據(jù)作為郵件發(fā)給這個(gè)帳號(hào)
            HOME=/ //使用者運(yùn)行的路徑,這里是根目錄
            # run-parts
            01 * * * * root run-parts /etc/cron.hourly //每小時(shí)執(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 放屁阿狗 閱讀(408) | 評(píng)論 (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 放屁阿狗 閱讀(1563) | 評(píng)論 (0)編輯 收藏

            cpio(copy in/out)

            功能說(shuō)明:備份文件。

            語(yǔ)  法: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][目的目]

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

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

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

            初始化:CVS版本庫(kù)的初始化。
            cvs init

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

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

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

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

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

            確認(rèn)修改寫入到CVS庫(kù)里:
            cvs commit -m "write some comments here" file_name

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

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

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

            刪除文件:
            將某個(gè)源文件物理刪除后,比如:rm file_name
            cvs rm file_name
            然后確認(rèn)修改并注釋
            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

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

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

            移動(dòng)文件:文件重命名
            cvs里沒(méi)有cvs move或cvs rename,因?yàn)檫@兩個(gè)操作是先cvs remove old_file_name,然后cvs add new_file_name實(shí)現(xiàn)的。

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

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

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

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

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

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

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

            在release_1_0_patch上修正錯(cuò)誤后,標(biāo)記一個(gè)1.0的錯(cuò)誤修正版本號(hào)
            cvs tag release_1_0_patch_1

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

            CVS的遠(yuǎn)程認(rèn)證:通過(guò)SSH遠(yuǎn)程訪問(wèn)CVS
            ================================

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

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

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

            解決的方法是做一個(gè)腳本指定端口轉(zhuǎn)向(不能使用alias,會(huì)出找不到文件錯(cuò)誤):
            創(chuàng)建一個(gè)/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)演化出很多功能界面更豐富的版本,這個(gè)是個(gè)人感覺(jué)覺(jué)得安裝設(shè)置比較方便的:
            http://www.spaghetti-code.de/software/linux/cvsweb/

            下載解包:
            tar zxf cvsweb.tgz
            把配置文件cvsweb.conf放到安全的地方(比如和apache的配置放在同一個(gè)目錄下),
            修改: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中還可以定制頁(yè)頭的描述信息,你可以修改$long_intro成你需要的文字

            CVSWEB可不能隨便開放給所有用戶,因此需要使用WEB用戶認(rèn)證:
            先生成 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$ 加在程序文件開頭的注釋里是一個(gè)很好的習(xí)慣,cvs能夠自動(dòng)解釋更新其中的內(nèi)容成:file_name version time user_name 的格式,比如:cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp,可以這些信息了解文件的最后修改人和修改時(shí)間

            幾個(gè)常用的缺省文件:
            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沒(méi)有文件鎖定模式,VSS在check out同時(shí),同時(shí)記錄了文件被導(dǎo)出者鎖定。

            CVS是update commit, VSS是check out check in

            在CVS中,標(biāo)記自動(dòng)更新功能缺省是打開的,這樣也帶來(lái)一個(gè)潛在的問(wèn)題,就是不用-kb方式添加binary文件的話在cvs自動(dòng)更新時(shí)可能會(huì)導(dǎo)致文件失效。

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

            TAG 缺省值 含義
            PROJECT_NAME  項(xiàng)目名稱
            PROJECT_NUMBER  可以理解為版本信息
            OUTPUT_DIRECTORY  輸出文件到的目錄,相對(duì)目錄(doxygen運(yùn)行目錄)或者絕對(duì)目錄
            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 生成文檔的語(yǔ)言,當(dāng)前支持2、30種語(yǔ)言,國(guó)內(nèi)用戶可以設(shè)置為Chinese
            USE_WINDOWS_ENCODING YES(win版本)
            NO(unix版本) 編碼格式,默認(rèn)即可。
            EXTRACT_ALL NO 為NO,只解釋有doxygen格式注釋的代碼;為YES,解析所有代碼,即使沒(méi)有注釋。類的私有成員和所有的靜態(tài)項(xiàng)由EXTRACT_PRIVATE和 EXTRACT_STATIC控制
            EXTRACT_PRIVATE NO 是否解析類的私有成員
            EXTRACT_STATIC NO 是否解析靜態(tài)項(xiàng)
            EXTRACT_LOCAL_CLASSES YES 是否解析源文件(cpp文件)中定義的類
            SOURCE_BROWSER NO 如果為YES,源代碼文件會(huì)被包含在文檔中
            INLINE_SOURCES NO 如果為YES,函數(shù)和類的實(shí)現(xiàn)代碼被包含在文檔中
            ALPHABETICAL_INDEX NO 生成一個(gè)字母序的列表,有很多類、結(jié)構(gòu)等項(xiàng)時(shí)建議設(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格式寫注釋。通常代碼可以附上一個(gè)注釋塊來(lái)對(duì)代碼進(jìn)行解釋,一個(gè)注釋塊由一行或者多行組成。通常一個(gè)注釋塊包括一個(gè)簡(jiǎn)要說(shuō)明(brief)和一個(gè)詳細(xì)說(shuō)明(detailed),這兩部分都是可選的。可以有多種方式標(biāo)識(shí)出doxygen可識(shí)別的注釋塊。
            1)JavaDoc類型的多行注釋。
            /**
             *  ….text….
             */
            2)QT樣式的多行注釋。
            /*!
            ….text….
             */
            3) /// …text….
            4) //! …text….
            簡(jiǎn)要說(shuō)明有多種方式標(biāo)識(shí),這里推薦使用@brief命令強(qiáng)制說(shuō)明,例如:
            /**
             * @brief [some brief description ]
             *      [ brief description more. ]
             *
             * [some more detailed description…]
             */
            以上這些注釋格式用來(lái)對(duì)緊跟其后的代碼進(jìn)行注釋。doxygen也允許把注釋放到代碼后面,具體格式是放一個(gè)'<'到注釋開始部分。例如:
            int var1 ; /**< ….text…. */
            int var2; ///< ….text….

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

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

            對(duì)函數(shù)的注釋,是比較常常需要注釋的部分。除了定義其簡(jiǎn)要說(shuō)明以及詳細(xì)注釋,還可以使用param命令對(duì)其各個(gè)參數(shù)進(jìn)行注釋,使用return命令對(duì)返回值進(jìn)行注釋。常見(jiàn)的格式如下:
            /**
             *@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);

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

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

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

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

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

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

            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. 簡(jiǎn)介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 放屁阿狗 閱讀(1862) | 評(píng)論 (0)編輯 收藏

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

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

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

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

             

            QgsRasterLayer 通過(guò)QgsSingleSymbolRenderer實(shí)現(xiàn)矢量對(duì)象的繪制

             

            2 QgsMapLayer 地圖圖層

             圖層類型: VECTOR,RASTER

            2.1 QgsVectorLayer矢量圖層

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

            2.2 QgsMapCanvasLayer 畫板圖層

            2.3 QgsMapLayerRegistry

                   存儲(chǔ)當(dāng)前所有地圖層對(duì)象,提供Layer id查詢MapLayer對(duì)象的功能mapLayer(layid)

            2.4 QgsMapCanvasLayer

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

             

            3.QgsFeature

            圖層特征對(duì)象。QgsFeature包含若干Attribute,一個(gè)QgsGeometry對(duì)象

             

            QgsLine

             QgsLine2個(gè)QgsPoint構(gòu)成的線段

            4. QgsMapRender

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

            Render(){

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

                  

            }

             

            5.OgsMapCanvas圖層繪制板

            N個(gè)圖層是繪制在QgsMapCanvasMap這個(gè)對(duì)象之上的,這個(gè)對(duì)象是Qt的繪制對(duì)象

            QgsMapCanvasMap其實(shí)就是提供OgsMapRender的繪制緩沖,最終還是請(qǐng)求QgsMapRender進(jìn)行圖層繪制。

             

            6. QgsProviderRegistry

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

             

             

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

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

            QgsOgrProvider作為QgsVectorDataProvider的子類,QgsVectorDataProvider作為接口被其他模塊訪問(wèn)

            new QgsVectorLayer(ogr){

                   new QgsSingleSymbolRenderer()

            }

             

            QgsMapToPixel

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

             

             

            QgsProject QgsProjectFileTransformQgsversion

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

             

             

            QgsSymbol

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

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

             

            矢量圖層類型:

                Point,

                Line,

                Polygon,

             

             

            QgsMapTip

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

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

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

             

            QgsFieldMap

            typedef QMap<int, QgsField> QgsFieldMap;

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

             

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

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

             

             

            地圖距離單位:

            METERS,

            FEET,

            DEGREES,

             

             

             

            Mbr : 可能全稱 Max boundary Rectangle

             

            坐標(biāo)轉(zhuǎn)換:

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

                   2.世界坐標(biāo)轉(zhuǎn)換到屏幕坐標(biāo)【QgsMapToPixel實(shí)現(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之間任意一個(gè)值

            #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: 我的行徑上要路過(guò)的點(diǎn)。比如我去北京,順便到徐州拜訪朋友,所以途經(jīng)的徐州是我要停留的waypoint

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

            l         Tracks 我途經(jīng)的路上所有走過(guò)的軌跡點(diǎn)(因該是最多的數(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 放屁阿狗 閱讀(4540) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共25頁(yè): First 14 15 16 17 18 19 20 21 22 Last 
            久久综合欧美成人| 国产成人久久777777| 亚洲狠狠婷婷综合久久久久 | 久久久久久综合网天天| 久久精品国产亚洲AV电影| 久久精品国产免费| 色天使久久综合网天天| 久久久精品人妻一区二区三区蜜桃 | 久久精品亚洲中文字幕无码麻豆| 亚洲国产成人久久综合一| 精品综合久久久久久97| 国产福利电影一区二区三区,免费久久久久久久精 | 久久免费精品视频| 中文字幕热久久久久久久| 精品国产婷婷久久久| 97热久久免费频精品99| 久久精品卫校国产小美女| 久久精品无码一区二区三区免费| 999久久久无码国产精品| 欧美日韩精品久久久久| 久久综合日本熟妇| 国产一区二区精品久久凹凸| 97久久久久人妻精品专区| 午夜精品久久久久久久| 97精品依人久久久大香线蕉97| 日韩久久无码免费毛片软件| 青草影院天堂男人久久| 久久99免费视频| 久久青青草原综合伊人| 国产成年无码久久久久毛片| 久久久久久久久久久久中文字幕| 久久99热这里只有精品66| 久久久久99这里有精品10| 国产69精品久久久久观看软件| 久久亚洲天堂| 狠狠综合久久综合88亚洲| 亚洲AV日韩精品久久久久久久| 国产成人综合久久精品红| 久久这里只有精品18| 99久久99久久精品免费看蜜桃| 91精品国产91久久综合|