• <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,再見!高德

            https://github.com/adoggie

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

            常用鏈接

            留言簿(54)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            #

            /sbin/service crond start     //啟動服務
            /sbin/service crond stop     //關閉服務
            /sbin/service crond restart //重啟服務
            /sbin/service crond reload     //重新載入配置

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


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

            crontab -l //列出某個用戶cron服務的詳細內容

            crontab -r //刪除沒個用戶的cron服務

            crontab -e //編輯某個用戶的cron服務

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

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

            在編輯cron服務時,編輯的內容有一些格式和約定,輸入:crontab -u root -e

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

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

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

            每天早上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設置后,cron自動在/var/spool/cron下生成一個與此用戶同名的文件,此用戶的cron信息都記錄在這個文件中,這個文件是不可以直接編輯的,只可以用crontab -e 來編輯。cron啟動后每過一份鐘讀一次這個文件,檢查是否要執行里面的命令。因此此文件修改后不需要重新啟動cron服務。

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

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

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


            posted @ 2008-07-04 01:25 放屁阿狗 閱讀(399) | 評論 (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 放屁阿狗 閱讀(1552) | 評論 (0)編輯 收藏

            cpio(copy in/out)

            功能說明:備份文件。

            語  法:cpio [-0aABckLovV][-C <輸入/輸出大小>][-F <備份檔>][-H <備份格式>][-O <備份檔>][--block-size= <區塊大小>][--force-local][--help][--quiet][--version] 或 cpio [- bBcdfikmnrsStuvV][-C <輸入/輸出大小>][-E <范本文件>][-F <備份檔>][- H <備份格式>][-I <備份檔>][-M <回傳信息>][-R <擁有者><: /.><所屬群組>][--block-size=<區塊大小>][--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備份檔內的文件。

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

            環境設置:指定CVS庫的路徑CVSROOT
            tcsh
            setenv CVSROOT /path/to/cvsroot
            bash
            CVSROOT=/path/to/cvsroot ; export CVSROOT

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

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

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

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

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

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

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

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

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

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

            添加文件
            創建好新文件后,比如:touch new_file
            cvs add new_file
            注意:對于圖片,Word文檔等非純文本的項目,需要使用cvs add -b選項,否則有可能出現文件被破壞的情況
            比如: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

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

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

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

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

            CVS Branch:項目多分支同步開發
            =============================

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

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

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

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

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

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

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

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

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

            如果CVS所在服務器的SSH端口不在缺省的22,或者和客戶端與CVS服務器端SSH缺省端口不一致,有時候設置了:
            :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)

            解決的方法是做一個腳本指定端口轉向(不能使用alias,會出找不到文件錯誤):
            創建一個/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是指相應服務器SSH的端口,不是cvs pserver的端口

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

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

            CVSWEB的下載:CVSWEB從最初的版本已經演化出很多功能界面更豐富的版本,這個是個人感覺覺得安裝設置比較方便的:
            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';

            轉到/path/to/apache/conf下并修改cvsweb.conf:

               1. 修改CVSROOT路徑設置:
                  %CVSROOT = (
                  'Development' => '/path/to/cvsroot', #<==修改指向本地的CVSROOT
                  );
               2. 缺省不顯示已經刪除的文檔:
                  "hideattic" => "1",#<==缺省不顯示已經刪除的文檔
               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$ 加在程序文件開頭的注釋里是一個很好的習慣,cvs能夠自動解釋更新其中的內容成: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注釋用 /** 開始的區別
            /*
            * 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同時,同時記錄了文件被導出者鎖定。

            CVS是update commit, VSS是check out check in

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

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

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

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

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

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

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

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


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

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

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

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

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

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

            需要注意的是doxygen并不處理所有的注釋,doxygen重點關注與程序結構有關的注釋,比如:文件、類、結構、函數、變量、宏等注釋,而忽略函數內變量、代碼等的注釋。

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

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

            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種語言,國內用戶可以設置為Chinese
            USE_WINDOWS_ENCODING YES(win版本)
            NO(unix版本) 編碼格式,默認即可。
            EXTRACT_ALL NO 為NO,只解釋有doxygen格式注釋的代碼;為YES,解析所有代碼,即使沒有注釋。類的私有成員和所有的靜態項由EXTRACT_PRIVATE和 EXTRACT_STATIC控制
            EXTRACT_PRIVATE NO 是否解析類的私有成員
            EXTRACT_STATIC NO 是否解析靜態項
            EXTRACT_LOCAL_CLASSES YES 是否解析源文件(cpp文件)中定義的類
            SOURCE_BROWSER NO 如果為YES,源代碼文件會被包含在文檔中
            INLINE_SOURCES NO 如果為YES,函數和類的實現代碼被包含在文檔中
            ALPHABETICAL_INDEX NO 生成一個字母序的列表,有很多類、結構等項時建議設為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 注釋風格
            下面是工作量最大部分,安裝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關注的注釋類型)。這里不推薦使用,建議注釋盡量放在代碼前后。具體使用方式參見doxygen手冊。

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

            對函數的注釋,是比較常常需要注釋的部分。除了定義其簡要說明以及詳細注釋,還可以使用param命令對其各個參數進行注釋,使用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);

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

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

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

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

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

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

            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 放屁阿狗 閱讀(1856) | 評論 (0)編輯 收藏

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

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

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

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

             

            QgsRasterLayer 通過QgsSingleSymbolRenderer實現矢量對象的繪制

             

            2 QgsMapLayer 地圖圖層

             圖層類型: VECTOR,RASTER

            2.1 QgsVectorLayer矢量圖層

                   QgsVectorLayer對應的就是QgsRasterLayer , QgsMapLayer的子類圖層對象僅僅這兩種。

            2.2 QgsMapCanvasLayer 畫板圖層

            2.3 QgsMapLayerRegistry

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

            2.4 QgsMapCanvasLayer

                   QgsMapCanvasLayerqgis應用層的圖層對象,用于村促跟用戶交互的信息,它并不是Map核心數據對象

             

            3.QgsFeature

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

             

            QgsLine

             QgsLine2QgsPoint構成的線段

            4. QgsMapRender

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

            Render(){

                   QgsMapRender內部保留圖層名稱數組,根據圖層idQgsMapLayerRegistry中獲取圖層對象,繪制圖層從最底部開始。

                  

            }

             

            5.OgsMapCanvas圖層繪制板

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

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

             

            6. QgsProviderRegistry

                   Qgis的數據源作為一個provider將被登記在QgsProviderRegistry對象中

             

             

            創建一個新的矢量圖層

            QgsProviderRegistry中查找ogrprovider,創建一個ogr的矢量數據空間createEmptyDataSource

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

            new QgsVectorLayer(ogr){

                   new QgsSingleSymbolRenderer()

            }

             

            QgsMapToPixel

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

             

             

            QgsProject QgsProjectFileTransformQgsversion

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

             

             

            QgsSymbol

            這個類一方面是實現繪制圖層類型的IconQgis中如果創建新的line矢量層,則這個層的圖標顯示在層顯示樹的節點的Icon就是用QgsSymbol繪制產生

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

             

            矢量圖層類型:

                Point,

                Line,

                Polygon,

             

             

            QgsMapTip

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

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

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

             

            QgsFieldMap

            typedef QMap<int, QgsField> QgsFieldMap;

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

             

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

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

             

             

            地圖距離單位:

            METERS,

            FEET,

            DEGREES,

             

             

             

            Mbr : 可能全稱 Max boundary Rectangle

             

            坐標轉換:

                  1.空間坐標轉換: long/lat坐標投影到世界地圖坐標 QgsCoordinateTransform實現】

                   2.世界坐標轉換到屏幕坐標【QgsMapToPixel實現】

             

            //數學宏

            #define PI 3.1415926

            //角度轉弧度

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

            //弧度轉角度

            #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日志數據的通用解析和轉換工具

            gps log數據分類:

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

            l         Routes 是指所有WayPoint的集合構成的線路

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

            WayPointroute我理解為是面向應用的,而Track就是基礎數據,是物理的記錄

            看看老外的注釋

            > 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 放屁阿狗 閱讀(4528) | 評論 (0)編輯 收藏

            僅列出標題
            共25頁: First 14 15 16 17 18 19 20 21 22 Last 
            国产美女久久久| 亚洲精品乱码久久久久久| 人妻无码αv中文字幕久久| 性做久久久久久久久| 久久精品女人天堂AV麻| 成人a毛片久久免费播放| 99久久99这里只有免费费精品| 久久久久久国产a免费观看黄色大片| 久久精品无码一区二区三区免费 | 久久99久久99小草精品免视看| 久久精品国产免费观看| 久久久久久久精品成人热色戒| 欧美亚洲国产精品久久高清| 一本久久a久久精品综合香蕉| 久久99这里只有精品国产| 久久妇女高潮几次MBA| 久久久无码人妻精品无码| 久久精品国产一区| 欧美日韩精品久久久久| 久久久一本精品99久久精品88| 亚洲va久久久噜噜噜久久狠狠| 久久久久久久久无码精品亚洲日韩| 99999久久久久久亚洲| 国产精品永久久久久久久久久| 日本精品久久久久久久久免费| 99蜜桃臀久久久欧美精品网站| 国产精品美女久久久久| 狠狠色丁香婷婷综合久久来来去| 久久精品国产99久久丝袜| 久久无码中文字幕东京热| 国产欧美久久久精品| 久久夜色精品国产噜噜亚洲a| 伊人久久精品无码av一区| 久久亚洲国产午夜精品理论片| 香蕉久久影院| 欧美精品一本久久男人的天堂| 亚洲欧美日韩精品久久亚洲区| 国产成人精品免费久久久久| 无夜精品久久久久久| 久久精品国产一区| 久久久久久午夜成人影院|