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

            colorful

            zc qq:1337220912

             

            postgresql安裝


            下載postgresql-9.1.3.tar.bz2
            解壓tar -vxf postgresql-9.1.3.tar.bz2

            安裝
            ./configure –without-readline –without-zlib
            make
            su
            make install

            設(shè)置
            mkdir /home/zc/postgresql/data
            chown postgres /home/zc/postgresql/data
            su - postgres

            /usr/local/gpsql/bin/initdb -D /home/zc/postgresql/data
            /usr/local/gpsql/bin/postgres -D /home/zc/postgresql/data >logfiel 2>&1 &
            /usr/local/pgsql/bin/createdb test
            /usr/local/pgsql/bin/psql test    // 這里修改postgres的密碼,
            test=# ALTER USER postgres WITH PASSWORD ‘postgres’;
            test=# \q

            修改系統(tǒng)用戶(hù)postgres的密碼(注意,上面的是數(shù)據(jù)庫(kù)用戶(hù),這個(gè)是debian用戶(hù), 將它們密碼設(shè)為相同的)
            root@ubuntuserver:~# sudo passwd -d postgres
            root@ubuntuserver:~# sudo -u postgres passwd

            修改配置文件
            cd /home/zc/postgresql/data
            vim postgresql.conf
            找到listen_address=’localhost’, 將前面的注釋去掉,并把’localhost’該為’*’。
            vim pg_hba.conf
            在后面加上
            host   all all 192.168.0.0/24   password
            這句的意思是:同網(wǎng)絡(luò)中192.168.0.*的機(jī)器可以以密碼的形式使用所有的數(shù)據(jù)庫(kù)。更具體的參數(shù)意義直接看該配置文件中的注釋就可以了

            配置好后重起數(shù)據(jù)庫(kù)
            /usr/local/pgsql/bin/pg_ctl stop -D /home/zc/postgresql/data
            /usr/local/gpsql/bin/postgres -D /home/zc/postgresql/data >logfiel 2>&1 &

            Ok
            查看是否有開(kāi)啟監(jiān)聽(tīng)
            netstat -plunt | grep 5432

            -----------------------------------------------------------
            mkdir -p /data/postgres
            ln -s /data/postgres/ /home/
            groupadd postgres
            useradd -d /home/postgres -g postgres postgres
            chown -R postgres:postgres /data/postgres/
            su - postgres -c "/usr/local/services/postgresql/bin/initdb -A md5 --locale=en_US.utf8 --lc-ctype=en_US.utf8  -E UTF-8 -W /data/postgres"

            mkdir /data/postgres/pg_log
            chown -R postgres:postgres /data/postgres/pg_log


            posted @ 2012-05-30 16:48 多彩人生 閱讀(440) | 評(píng)論 (0)編輯 收藏

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            作為ubuntu的愛(ài)好者,第一次制作ubuntu安裝教程,多有不足,還望包涵,呵呵~11.04因?yàn)檫€在測(cè)試階段,我就不折騰了,就做個(gè)10.04的用U盤(pán)安裝的教程吧。

            說(shuō)到ubuntu,有接觸linux的童鞋都應(yīng)該聽(tīng)過(guò),用wubi安裝只是像在電腦上安裝一個(gè)軟件,可以輕松體驗(yàn)ubuntu,不過(guò)畢竟性能會(huì)打折扣,所以本人是比較喜歡直接安裝在硬盤(pán)上的。

            這種方法只適合用desktop下進(jìn)行安裝,不能在文本模式下,本人試過(guò),沒(méi)安裝成功,具體原因沒(méi)有去理了,呵呵。

            廢話(huà)不多說(shuō),開(kāi)始需要準(zhǔn)備一些東西

            1、從官網(wǎng)下載一個(gè)ubuntu10.04的鏡像

            2、一個(gè)大于等于1G的支持啟動(dòng)的U盤(pán)

            3、UltraISO最新版

            4、可以上網(wǎng)的電腦一臺(tái)。

            接下來(lái)是安裝和設(shè)置的步奏,比較長(zhǎng),希望大家能夠耐心看下去。

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu 

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu 

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu 

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu 

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu 

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu 

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu 

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu 

            圖文教程:手把手教你用U盤(pán)安裝Ubuntu

            posted @ 2012-05-29 19:58 多彩人生 閱讀(287) | 評(píng)論 (0)編輯 收藏

            Debian 6解決中文亂碼

            DEBIAN下中文顯示

            一.首先檢查L(zhǎng)OCALE情況

            說(shuō)明:DEBIAN因?yàn)榛贕NU所以,對(duì)不同地域進(jìn)行了不同的包支持,以LOCALE形式存在。

            1.掛載ISO文件包,前8個(gè)ISO包就可以(這里不在講述)。

            2.啟動(dòng)終端

            #apt-get install locales

            3.重新配置LOCALE

            #dpkg-reconfigure locales

            在所有的語(yǔ)言包選擇en_US.ISO-8859-1和zh_CN.GBK。其他en_US和zh_CN打頭的也選上。然后選擇zh_CN.GBK為默認(rèn)的LOCALE,則系統(tǒng)為中文界面(這里也可以選en_US.ISO,使系統(tǒng)為英文界面)。

            3.運(yùn)行LOCALE命令檢查當(dāng)前的LOCALE環(huán)境

            #locale

            正確配置下會(huì)顯式

            LANG =zh_CN.GBK 

            ........................以下顯示略過(guò)

             


            ============================================================================

            Debian 6解決中文亂碼

            解決辦法:打開(kāi)終端,切換至root帳號(hào)。  

             
            執(zhí)行以下命令:

            apt-get install ttf-wqy-zenhei(安裝字體)   
            apt-get install ibus ibus-gtk ibus-pinyin(安裝輸入法)

            -------------------------

            設(shè)置本地化 Locale
            如果我們?cè)诎惭b Debian
            系統(tǒng)時(shí),語(yǔ)言選擇了英語(yǔ)呢?進(jìn)入系統(tǒng)后看到全是英文,是不是有點(diǎn)郁悶。那么我們?cè)鯓釉O(shè)置成簡(jiǎn)體中文呢?
            #如果你安裝系統(tǒng)時(shí)選擇的就是簡(jiǎn)體中文,可以跳過(guò)這段,只安裝中文字體就行了。當(dāng)然你也可以修改成其他的語(yǔ)言。

            打開(kāi)終端,執(zhí)行命令:
            dpkg-reconfigure locales

            把 帶 zh_CN 字樣的全部選上,然后選擇 OK 確定,在彈出的對(duì)話(huà)框中,選擇系統(tǒng)的 locale ,選擇zh_CN.UTF-8。


            安裝時(shí)選擇的是英語(yǔ),會(huì)缺少中文字體,用以下命令安裝字體:
            apt-get install xfonts-intl-chinese wqy*

            下次重起機(jī)器,在GNOME登錄介面下方的Language,登錄語(yǔ)言選擇:漢語(yǔ)(中國(guó))

            設(shè)置字體
            對(duì)著桌面猛擊右鍵 ===> 更改桌面背景 ===> 字體
            #
            選擇自己喜歡的字體,比如:文泉驛點(diǎn)陣正黑或文泉驛微米黑


            輸入法
            選擇喜歡的輸入法,比如: ibus scim
            # 注:fcitx 輸入法在debian unstable
            軟件源里才有,如果需要的話(huà),只能自行下載安裝了。或者添加 Debian unstable 的軟件源。
            apt-get install
            ibus-pinyin ibus-table-wubi #安裝IBUS五筆和拼音

            設(shè)置輸入法
            系統(tǒng) ===> 首選項(xiàng) ===> IBus 設(shè)置
            #設(shè)置快捷鍵和添加輸入法到列表。

            瀏覽器
            Iceweasel瀏覽器簡(jiǎn)體中文組件 # Iceweasel是Debian中Mozilla
            Firefox瀏覽器的一個(gè)再發(fā)布版
            #英語(yǔ)很菜,所以瀏覽器菜單也要是中文的
            apt-get install
            iceweasel-l10n-zh-cn

            運(yùn)行瀏覽器,然后點(diǎn)擊
            瀏覽器菜單 ===> 編輯 ===> 首選項(xiàng) ===> 內(nèi)容
            # 設(shè)置瀏覽器字體


            谷歌開(kāi)源瀏覽器Chromium
            # 不喜歡用這個(gè)的,也可以安裝 Chrome 瀏覽器
            apt-get install
            chromium-browser chromium-browser-l10n


            Flash插件
            執(zhí)行命令:
            apt-get install flashplugin-nonfree
            #嫌手動(dòng)安裝官方Flash插件麻煩的,直接安裝這個(gè)吧

            手動(dòng)安裝官方Flash插件
            # 注意如果你已經(jīng)用上面的命令安裝了flashplugin-nonfree,最好先卸載掉。
            #
            可能是為了避免沖突吧,不然瀏覽器不知道用哪個(gè)插件,我不清楚原因。

            源里的flash插件和官方的正式版的flash插件,在我這里播放在線視頻時(shí),全屏?xí)āN野惭b的是測(cè)試版的flash插件

            先下載兩個(gè)軟件包,不然裝好了Flash插件也用不了。裝源里的 flashplugin-nonfree 會(huì)自動(dòng)安裝這兩個(gè)文件。
            apt-get
            install ca-certificates libcurl3-gnutls


            到下面網(wǎng)址下載 Flash Player 的壓縮包
            http://labs.adobe.com/downloads/flashplayer10.html

            Download plug-in for 32-bit Linux (TAR.GZ, 4.7 MB) ← 下載這個(gè)

            然后解壓下載下來(lái)的壓縮文件,解壓出來(lái)
            libflashplayer.so

            切換到普通用戶(hù)創(chuàng)建存放 Flash 插件的目錄
            mkdir -pv ~/.mozilla/plugins

            進(jìn)入存放 libflashplayer.so 的目錄
            cp -v libflashplayer.so ~/.mozilla/plugins

            Chromium安裝Flash插件
            su
            cp -v libflashplayer.so
            /usr/lib/chromium-browser/plugins


            影音播放器
            #Mplayer和播放前端SMplayer
            apt-get install mplayer smplayer

            設(shè)置QT程序字體
            # 在Debian GNOME桌面中QT程序的字體不清析,所以要設(shè)置一下

            先備份 /etc/fonts/conf.d/49-sansserif.conf
            cp -v
            /etc/fonts/conf.d/49-sansserif.conf{,.backup}

            修改 /etc/fonts/conf.d/49-sansserif.conf

            把文件倒數(shù)第4行中:
            sans-serif
            ↓↓
            文泉驛微米黑

            # 把sans-serif替換成文泉驛微米黑,前提你得先安裝文泉驛字庫(kù)

            PDF閱讀器
            Foxit # 如果覺(jué)得系統(tǒng)自帶的不好用,就下載這個(gè)吧
            http://www.foxitsoftware.com/downloads/index.php
            #找到
            Foxit Reader 1.1 Build 20090810 for Desktop Linux(bz2),下載后解壓運(yùn)行目錄下的foxit就可以用。


            CHM閱讀器
            如果有Windows下的CHM文檔資料要看,那么就安裝chmsee吧
            apt-get install
            chmsee

            星際譯王
            # 星際譯王是 GNOME 中的國(guó)際化的詞典軟件
            # 本人英文單詞不會(huì)幾個(gè)的,所以是必配的詞典軟件
            apt-get
            install stardict

            #詞典下載,下載地址如下,下載tarball包,解壓后,復(fù)制到 /usr/share/stardict/dict/
            目錄下,
            #最好在這個(gè)目錄下新建文件夾來(lái)分類(lèi)存放詞典。
            http://stardict.sourceforge.net/Dictionaries_zh_CN.php


            截圖工具shutter
            #默認(rèn)情況下,Debian沒(méi)有安裝gnome-screenshot,可以下載功能更強(qiáng)大的shutter
            apt-get
            install shutter
            apt-get install libgoo-canvas-perl # 編輯功能插件

            解壓縮軟件
            apt-get install unrar
            apt-get install unzip
            apt-get install
            p7zip-full


            安裝基本編譯環(huán)境
            # 有時(shí)可能自己想編譯軟件
            apt-get install gcc
            apt-get install
            linux-headers-`uname -r`
            apt-get install make
            apt-get install automake

            虛擬機(jī)VirtualBox-OSE
            # 使用 Linux 或多或少都要用虛擬機(jī)吧,如果不喜歡OSE版,可以到官方去下載。
            apt-get
            install virtualbox-ose

            VirtualBox 官方主頁(yè):
            http://www.virtualbox.org/


            FTP上傳下載工具
            # gFTP是X Window下的一個(gè)用Gtk開(kāi)發(fā)的多線程FTP客戶(hù)端工具
            apt-get install
            gftp


            LINUX下的“電驢”
            # aMule 是基于eMule的“全平臺(tái)”P2P客戶(hù)端
            apt-get install amule


            BT下載工具
            Transmission是一種BitTorrent客戶(hù)端
            apt-get install
            transmission

            posted @ 2012-05-28 18:07 多彩人生 閱讀(23665) | 評(píng)論 (0)編輯 收藏

            Ubuntu下Postgresql8.4安裝配置

            注意事項(xiàng):由于wordpress會(huì)自動(dòng)將半角單引號(hào)轉(zhuǎn)換為全角單引號(hào),引用代碼時(shí)需要手動(dòng)修改為單引號(hào)

            第一步:在Ubuntu下安裝Postgresql

            [代碼內(nèi)容]
            root@ubuntuserver:~# sudo apt-get install postgresql-8.4 postgresql-client-8.4 postgresql-contrib-8.4
            [代碼說(shuō)明]
            安裝服務(wù)端和命令行客戶(hù)端psql。
            [功能說(shuō)明]
            /usr/lib/postgresql/8.4/              存放postgresql相關(guān)的二進(jìn)制文件
            /usr/lib/postgresql/8.4/bin/        可執(zhí)行文件
            /usr/lib/postgresql/8.4/lib/         共享庫(kù)文件
            /etc/postgres/8.4/main/              存放postgresql配置文文件
            /var/lib/postgresql/                    postgres用戶(hù)的主文件夾

            第二步:修改PostgreSQL數(shù)據(jù)庫(kù)的默認(rèn)用戶(hù)postgres的密碼(注意不是linux系統(tǒng)帳號(hào))

            [代碼內(nèi)容]
            root@ubuntuserver:~# sudo -u postgres psql
            postgres=# ALTER USER postgres WITH PASSWORD ‘postgres’;
            postgres=# \q
            [代碼說(shuō)明]
            ‘#’和’#’之前的字符是系統(tǒng)提示符,’postgres=#’是psql客戶(hù)端的提示符,紅色字符為輸入命令(本文其它部分亦如此);
            第一行:運(yùn)行psql,psql是一個(gè)標(biāo)準(zhǔn)的postgressql客戶(hù)端,也可以使用”sudo su postgres -c psql”,效果是一樣的;
            第二行:修改postgres的密碼為postgres,不要忘記添加分號(hào)(回車(chē)后分號(hào)之前的sql語(yǔ)句才會(huì)立即執(zhí)行)
            第三行:退出psql客戶(hù)端
            [功能說(shuō)明]

            PostgreSQL數(shù)據(jù)默認(rèn)會(huì)創(chuàng)建一個(gè)postgres的數(shù)據(jù)庫(kù)用戶(hù)作為數(shù)據(jù)庫(kù)的管理員,密碼是隨機(jī)的,我人需要修改為指定的密碼,這里設(shè)定為’postgres’。

            第三步:修改linux系統(tǒng)的postgres用戶(hù)的密碼(密碼與數(shù)據(jù)庫(kù)用戶(hù)postgres的密碼相同)

            [代碼內(nèi)容]
            root@ubuntuserver:~# sudo passwd -d postgres
            root@ubuntuserver:~# sudo -u postgres passwd
            [代碼說(shuō)明]
            第一行:刪除密碼
            第二行:創(chuàng)建密碼
            [功能說(shuō)明]
            PostgreSQL數(shù)據(jù)默認(rèn)會(huì)創(chuàng)建一個(gè)linux用戶(hù)postgres,通過(guò)上面的代碼修改密碼為’postgres’(這取決于第二步中的密碼,只要與其相同即可)。

            現(xiàn)在,我們就可以在數(shù)據(jù)庫(kù)服務(wù)器上用 postgres帳號(hào)通過(guò)psql或者pgAdmin等等客戶(hù)端操作數(shù)據(jù)庫(kù)了(暫時(shí)還不能遠(yuǎn)程訪問(wèn))。
            第四步:修改PostgresSQL數(shù)據(jù)庫(kù)配置實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)

            [代碼內(nèi)容]
            root@ubuntuserver:~# sudo vi /etc/postgresql/8.4/main/postgresql.conf
            —>改變行:#listen_addresses = ‘localhost’
            —>修改為:listen_addresses = ‘*’
            —>改變行:#password_encryption = on
            —>修改為:password_encryption = on
            root@ubuntuserver:~# sudo vi /etc/postgresql/8.4/main/pg_hba.conf
            —>文件末添加行:# to allow your client visiting postgresql server
            —>文件末添加行:host all all 0.0.0.0 0.0.0.0 md5
            root@ubuntuserver:~# sudo /etc/init.d/postgresql-8.4 restart
            [代碼說(shuō)明]
            第一行:修改postgresql.conf的目的是修改連接權(quán)限;
            第二行:修改pg_hba.conf的目的是設(shè)置誰(shuí)才可以操作數(shù)據(jù)服務(wù)器;
            第三行:重啟postgresql數(shù)據(jù)庫(kù)的服務(wù)程序,以使上面的配置生效。
            詳細(xì)解釋一下”host all all 0.0.0.0 0.0.0.0 md5
            host表示允許的類(lèi)型是主機(jī);
            第一個(gè)all是允許的數(shù)據(jù)庫(kù)名字;
            第二個(gè)all是允許的用戶(hù);
            第一個(gè)0.0.0.0是允許訪問(wèn)的ip address;
            第二個(gè)0.0.0.0是允許訪問(wèn)的subnet mask;
            最后的md5表示密碼的加密方式,如果將md5改成trust則可以讓指定范圍的主機(jī)數(shù)據(jù)庫(kù)的時(shí)候不需要提供密碼。
            關(guān)于ip address和subnet mask,你也可以修改為你的機(jī)器IP地址(如10.13.19.53)和子網(wǎng)掩碼(如 255.255.255.255),這樣就只有你自己的主機(jī)可以遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)了。 如果要使用一個(gè)IP地址范圍,只需要把子網(wǎng)掩碼設(shè)置成合適的值,如果子網(wǎng)掩碼設(shè)置成0.0.0.0,則所有主機(jī)均可以訪問(wèn)數(shù)據(jù)庫(kù)(IP可以任意設(shè)定),如 果將md5改成trust則可以讓指定范圍的主機(jī)訪問(wèn)指定的數(shù)據(jù)庫(kù)的時(shí)候不需要提供密碼。
            [功能說(shuō)明]
            實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)

            第五步:創(chuàng)建用戶(hù)和數(shù)據(jù)庫(kù)

            [代碼內(nèi)容]
            root@ubuntuserver:~# psql -U postgres -h 127.0.0.1
            postgres=# create user “IamJiwan” with password ‘IamJiwan’ nocreatedb;
            postgres=# create database “mydatabase” with owner=”IamJiwan”;
            [代碼說(shuō)明]
            第一行:運(yùn)行psql客戶(hù)端,并指定用戶(hù)為postgres主機(jī)為127.0.0.1,執(zhí)行此行后需要輸入密碼’postgres’,如不指定則默認(rèn)用戶(hù)為linux系統(tǒng)當(dāng)前登錄用戶(hù),默認(rèn)數(shù)據(jù)庫(kù)服務(wù)器為本機(jī);
            第二行:添加數(shù)據(jù)庫(kù)用戶(hù)“IamJiwan“;
            第三行:添加數(shù)據(jù)庫(kù)“mydatabase”并設(shè)定所有者為”IamJiwan”;
            用戶(hù)名和數(shù)據(jù)庫(kù)名稱(chēng)加上引號(hào)后才區(qū)分大小寫(xiě),否則會(huì)自動(dòng)轉(zhuǎn)換成小寫(xiě);
            雙引號(hào)作用:創(chuàng)建對(duì)象的時(shí)候,對(duì)象名、字段名加雙引號(hào),則表示嚴(yán)格區(qū)分大小寫(xiě),否則都默認(rèn)小寫(xiě);
            單引號(hào)作用:標(biāo)識(shí)字符與數(shù)字的區(qū)別,并不區(qū)分大小寫(xiě)。
            [功能說(shuō)明]
            創(chuàng)建用戶(hù)和數(shù)據(jù)庫(kù)
            [備注內(nèi)容]
            postgres還提供了命令行創(chuàng)建用戶(hù)和數(shù)據(jù)庫(kù)的方法:
            root@ubuntuserver:~# sudo -u postgres createuser -D -P mynewuser
            root@ubuntuserver:~# sudo -u postgres createdb -O mynewuser mydatabase
            第一行:-D該用戶(hù)沒(méi)有創(chuàng)建數(shù)據(jù)庫(kù)的權(quán)利,-P提示輸入密碼,后面的選項(xiàng)都可以省略,命令執(zhí)行的時(shí)候會(huì)提示用戶(hù)選擇yes或者no
            第二行:-O設(shè)定所有者為mynewuser

            第六步:如何安裝和使用pgAdmin3客戶(hù)端操作postgresql數(shù)據(jù)庫(kù)

            [代碼內(nèi)容]
            root@ubuntuserver:~# sudo apt-get install pgadmin3
            [功能說(shuō)明]
            安裝圖形客戶(hù)端pgAdmin3

            posted @ 2012-05-26 16:30 多彩人生 閱讀(1317) | 評(píng)論 (0)編輯 收藏

            postgresql源碼安裝

            http://cuojuan.com/
            http://cuojuan.com/review/26


            使用的Linux發(fā)行版是ubuntu server 6.06,ubuntu 自帶版本最高只有8.1,為了嘗鮮,同時(shí)8.2.0已經(jīng)對(duì)基于windows平臺(tái)的兼容性進(jìn)行了改進(jìn),便于平臺(tái)的轉(zhuǎn)換。同時(shí)源碼安裝可以自己制定一些參數(shù) 和設(shè)置,ubuntu雖然有很好的易用性和兼容性,并且部分特性也較新,但是同window有些相像,減少也封閉了很多細(xì)節(jié)問(wèn)題,讓開(kāi)發(fā)人員沒(méi)有機(jī)會(huì)也不 用嘗試去理解一些程序的安裝過(guò)程和參數(shù),對(duì)于程序開(kāi)發(fā)來(lái)說(shuō),并不一定是件好事。

            一 安裝Postgresql8.2.0

            1. 下載源碼。
            到postgresq.org下載最新的源碼。

            2 解壓。
            tar -vxf postgresql*.tar.gz
            3 配置,進(jìn)入解壓目錄后可以用./configure –help來(lái)查看可用的參數(shù)。我使用的是:

            # ./configure –prefix=/home/shaken/postgresql –without-readline –without-zlib

            前一個(gè)參數(shù)是把循照慣例把自己的軟件安裝到/opt目錄下,后面兩個(gè)參數(shù)是因?yàn)槲业南到y(tǒng)里沒(méi)有安裝readline和zlib,其實(shí)安裝一下就可以了。

            在ubuntu中這樣可以去掉后面的兩個(gè)–without參數(shù):
            # apt-get install libreadline5-dev zlib1g-dev
            解決在ubuntu安裝postgresql時(shí),configure出現(xiàn)的問(wèn)題。

            4 編譯后并安裝:

            # make

            # make install

            5 增加Postgresql數(shù)據(jù)庫(kù)的最高用戶(hù)postgres并設(shè)置密碼:

            # adduser postgres
            # mkdir /home/shaken/postgresql/data
            # chown postgres /home/shaken/postgresql/data

            最好再這樣:
            # chown -R postgres /home/shaken/postgresql

            6 以用戶(hù)postgres登陸:

            # su – postgres

            7 初始化數(shù)據(jù)庫(kù):
            $ /home/shaken/postgresql/bin/initdb -D /home/shaken/postgresql/data

            8 運(yùn)行數(shù)據(jù)庫(kù)服務(wù)器:

            $ /home/shaken/postgresql/bin/postmaster -D /home/shaken/postgresql/data>logfile 2>&1 &

            9 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù):

            $ /home/shaken/postgresql/bin/createdb test

            10 在本機(jī)上運(yùn)行客戶(hù)端進(jìn)行管理:

            $ /home/shaken/postgresql/bin/psql test

            這就要求你對(duì)基礎(chǔ)的sql語(yǔ)法要熟悉了。

            到這里Postgresql就算安裝完成了。但是為了能遠(yuǎn)程使用該數(shù)據(jù)庫(kù)—比如說(shuō)我要在網(wǎng)絡(luò)上另外一臺(tái)Windows電腦上使用pgAdmin來(lái)管 理 使用該P(yáng)ostgresql服務(wù)器—則還需要進(jìn)行一些修改,這些修改主要包括兩方面的修改,一是修改Postgresql的兩個(gè)配置文件,二是修改數(shù) 據(jù)庫(kù)的一些用戶(hù)權(quán)限:

            11 修改Postgresql的配置文件Postgresql.conf,該文件在數(shù)據(jù)目錄/home/shaken/postgresql/data下,將其中的一句:

            listen_address=’localhost’

            前面的注釋去掉,并把’localhost’該為’*’。

            12修改Postgresql的配置文件pg_hba.conf,該文件在數(shù)據(jù)目錄/home/shaken/postgresql/data下,在文件后面加一句:

            host   all all 192.168.0.0/24   password

            這句的意思是:同網(wǎng)絡(luò)中192.168.0.*的機(jī)器可以以密碼的形式使用所有的數(shù)據(jù)庫(kù)。更具體的參數(shù)意義直接看該配置文件中的注釋就可以了。

            這里一定要配置正確,否則無(wú)法在遠(yuǎn)程連接postgresql數(shù)據(jù)庫(kù)。

            13 重新啟動(dòng)postgresql服務(wù)器:

            $ /home/shaken/postgresql/bin/pg_ctl stop -D /home/shaken/postgresql/data

            停止原來(lái)的服務(wù)器

            $ $ /home/shaken/postgresql/bin/postmaster -i -D /home/shaken/postgresql/data >logfile 2>&1 &

            再次啟動(dòng),加一個(gè)-I參數(shù)

            14 一些數(shù)據(jù)庫(kù)用戶(hù)權(quán)限的簡(jiǎn)單配置,以下是在psql中使用

            # create userwen1 password ‘123456’;

            創(chuàng)建一個(gè)用戶(hù)并設(shè)置密碼

            # createdatabase data1 owner wen1;

            創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)

            # create tablewen11(name varcha(10))

            創(chuàng)建一個(gè)數(shù)據(jù)表

            # alter table wen11 owner to wen1;

            修改數(shù)據(jù)表的屬主。

            現(xiàn)在可以在局域網(wǎng)內(nèi)的其他電腦使用其他postgresql客戶(hù)端工具,以用戶(hù)名wen1打開(kāi)data1數(shù)據(jù)庫(kù)了。

            還需要改進(jìn)的一些問(wèn)題:

            1 中文支持的問(wèn)題:使用encoding=’UTF-8’創(chuàng)建數(shù)據(jù)庫(kù)好不好?

            2 系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng)postgresql的問(wèn)題:完全可以參考Debian的相應(yīng)啟動(dòng)腳本。

            二 phppgadmin的安裝配置(可選的過(guò)程)

            為了管理配置我的數(shù)據(jù)庫(kù)服務(wù)器,對(duì)于我這樣的postgresql生手,需要一個(gè)方便的管理程序。這樣的管理工具很多,考慮自己以前使用mysql 有一個(gè) 便利的phpmyadmin,我選擇了phppgadmin。   phpPgAdmin是一個(gè)充分地功能基于互聯(lián)網(wǎng)的postgresql管理實(shí)用程序。它處理所有基本的功能并且某個(gè)先進(jìn)的功能譬如觸發(fā)器, 視圖等,是一個(gè)基于B/S模式的管理軟件,必須安裝在服務(wù)器端。

            具體的安裝過(guò)程為:
            1 下載源碼,現(xiàn)在的最新版本為4.0.1
            # cd
            # wget http://……./phpPgAdmin-4.0.1.tar.gz
            2 解壓:
            # tar zxvf phpPgAdmin-4.0.1.tar.gz
            3 檢查系統(tǒng)是否已經(jīng)安裝好apache+php以及php對(duì)postgresql的支持,如果沒(méi)有,以下為安裝:
            # apt-get install apache php4 php4-pgsql
            注意修改apache的配置文件以使apache支持php。
            4 使phpPgAdmin在客戶(hù)端可用,我一般是在apapche目錄下建立符號(hào)連接:
            # ln -s /root/phpPgAdmin-4.0.1 /var/www/pgadmin
            5 修改phpPgAdmin的配置文件 config/config.inc.php,其中必須要修改的參數(shù)有:
            $conf['servers'][0]['host']=’localhost’;
            標(biāo)明數(shù)據(jù)庫(kù)服務(wù)器在本機(jī)
            $conf ['extra_security'] = false;
            允許使用postgres帳號(hào)登陸。
            6 在客戶(hù)端使用瀏覽器,輸入地址:
            http://……/pgadmin
            就可以進(jìn)行postgresql數(shù)據(jù)庫(kù)的管理了。

            三 安裝postgis

            1 最好先安裝proj4和OGR,我偷懶沒(méi)有安裝,應(yīng)該只是性能上打折扣吧,并不影響安裝使用。
            Debian下可以這樣:安裝postgis的時(shí)候,先:
            #apt-get install proj libgeos libgeos-dev

            2 下載源碼。

            3 解壓進(jìn)入目錄。

            4 配置:

            # ./configure –prefix=/opt/postgis –with-pgsql=/home/shaken/postgresql/bin/pg_config

            意思很明顯

            5 編譯、安裝:

            # make

            # make install

            6 之后的一些工作:

            $ /home/shaken/postgresql/bin/createdb data1

            $ /home/shaken/postgresql/bin/createlang plpgsql data1

            $ /home/shaken/postgresql/bin/psql-d data1 -f lwpostgis.sql

            $ /home/shaken/postgresql/bin/psql-d data1 -f spatial_ref_sys.sql

            注意找到并進(jìn)入包含后面那兩個(gè)sql文件的目錄再進(jìn)去執(zhí)行。

            下面可以使用postgis了,先試試Postgis提供那兩個(gè)轉(zhuǎn)換shape文件和postgis數(shù)據(jù)的小程序吧。

            四 PostGIS的初步使用

            網(wǎng)絡(luò)上關(guān)于PostGIS的使用的文章不多,而且說(shuō)得不夠詳細(xì),今天經(jīng)過(guò)一番摸索,得到一些基本應(yīng)用的經(jīng)驗(yàn),希望能減少一些大家入門(mén)的周折。

            以下假設(shè)我要把一個(gè)test.shp文件(實(shí)際上完整的應(yīng)包含三個(gè)文件)的數(shù)據(jù)導(dǎo)入到Postgresql數(shù)據(jù)庫(kù)data1中的test數(shù)據(jù)表,為 了安全 起見(jiàn),數(shù)據(jù)庫(kù)Data1及相關(guān)的數(shù)據(jù)表的屬主都設(shè)置為wen1,然后在GIS客戶(hù)端如QGIS uDig等使用這個(gè)PostGIS數(shù)據(jù)。詳細(xì)的過(guò)程為;

            1 假設(shè)PostGreSQL數(shù)據(jù)庫(kù)服務(wù)器和PostGIS都安裝好。(見(jiàn)另文”源碼安裝Postgresql8.1.3+PostGIS1.1.2″)
            2 以數(shù)據(jù)庫(kù)的超級(jí)用戶(hù)postgres進(jìn)入psql:
            # /home/shaken/postgresql/bin/psql         (注意路徑)
            以下的操作都是在psql控制臺(tái)。
            3 基本設(shè)置:
            # create user wen1 password ‘123456’;        創(chuàng)建一個(gè)用戶(hù)并設(shè)置密碼
            # create database data1 owner wen1;            創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)
            # alter table spatial_ref_sys owner to wen1;
            # alter table geometry_columns owner to wen1 ; 這兩句修改兩個(gè)postgis相關(guān)的表的屬主為wen1,很重要,一般文章中似乎沒(méi)提到這兩點(diǎn)。
            4 數(shù)據(jù)轉(zhuǎn)換,以下工作退出psql,在shell界面進(jìn)行。
            先把三個(gè)test.shp文件復(fù)制到/opt/postgis/bin目錄下并轉(zhuǎn)到該目錄下,注意路徑,注意目錄和文件的權(quán)限—也許退出postgres用戶(hù)到root用戶(hù)簡(jiǎn)單一些。
            # /opt/postgis/bin/shp2pgsql test test data1 > test.sql
            # /home/shaken/postgresql/bin/psql -d data1 -f test.sql
            注意參數(shù)都要寫(xiě)對(duì),不明白的話(huà)一定要用–help參數(shù)查看。
            5 在客戶(hù)機(jī)器上打開(kāi)QGIS,依次選擇”圖層”–>”添加PostGIS圖層”–>”新建”,然后設(shè)置好正確的服務(wù)器IP,數(shù)據(jù)庫(kù)名data1,用戶(hù)wen1及密碼,再點(diǎn)擊”連接”,然后下方會(huì)出現(xiàn)test圖層的名字,選擇就可以了。
            uDig的使用也大同小異。

            一點(diǎn)體會(huì):
            1 要先弄懂PostgreSQL的使用,尤其是各種權(quán)限的概念和關(guān)系,這是一般從Windows下轉(zhuǎn)移來(lái)的人很缺乏的。
            2 最好選擇一個(gè)好的PostgreSQL客戶(hù)端工具來(lái)幫助調(diào)試,推薦使用PgAdmin。

            posted @ 2012-05-26 15:13 多彩人生 閱讀(1889) | 評(píng)論 (0)編輯 收藏

            使用proto 時(shí)犯的一個(gè)錯(cuò)誤

            自己定義的 #define CMD_ID_SERVER  1000

            然后在proto文件里定義了
            enum CMD_ID
            {
                  CMD_ID_SERVER = 20000;
            }

            得到下面的錯(cuò)誤
            Error    7    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int    e:\zc\test\doloio\package\hello\hello.pb.h    46
            Error    9    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int    e:\zc\test\doloio\package\hello\hello.pb.h    46
            Error    10    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int    e:\zc\test\doloio\package\hello\hello.pb.h    47
            Error    13    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int    e:\zc\test\doloio\package\hello\hello.pb.h    47
            Error    20    error C2447: '{' : missing function header (old-style formal list?)    e:\zc\test\doloio\package\hello\hello.pb.h    51
            Error    27    error C2447: '{' : missing function header (old-style formal list?)    e:\zc\test\doloio\package\hello\hello.pb.h    431
            Error    17    error C2440: 'initializing' : cannot convert from 'const int' to 'const std::string &'    e:\zc\test\doloio\package\hello\hello.pb.h    51
            。。。。。。。。。。

            ------------------------------------------
            其實(shí)根據(jù)錯(cuò)誤信息應(yīng)該很容易發(fā)現(xiàn)錯(cuò)誤所在,但因?yàn)槲倚募保瑳](méi)能靜下心來(lái)看錯(cuò)誤信息以至浪費(fèi)了更多的時(shí)間和精力于無(wú)謂的猜測(cè)試驗(yàn)


            posted @ 2012-05-22 18:00 多彩人生 閱讀(884) | 評(píng)論 (1)編輯 收藏

            跨平臺(tái)開(kāi)發(fā)連載(6_跨平臺(tái)IO的影響因素)

            http://blog.csdn.net/wqf363/article/details/1420554

            如果你正在寫(xiě)從文件或網(wǎng)絡(luò)讀寫(xiě)數(shù)據(jù)的跨平臺(tái)C/C++代碼,那么你必須明白有些問(wèn)題是因語(yǔ)言,編譯器,平臺(tái)而不同的。 主要的問(wèn)題是數(shù)據(jù)對(duì)齊,填充類(lèi)型大小字節(jié)順序默認(rèn)狀態(tài)char是否有符號(hào)
            對(duì)齊
            特定機(jī)器上,特定的數(shù)據(jù)被對(duì)齊于特定的邊界。如果數(shù)據(jù)沒(méi)有正確對(duì)齊,結(jié)果可能是效率降低甚至崩潰。 當(dāng)你從I/O源讀取數(shù)據(jù)的時(shí)候,確保對(duì)齊是正確的。詳細(xì)內(nèi)容參考本人另一篇blog: 字節(jié)對(duì)齊的影響因素
            填充
            "填充" 是數(shù)據(jù)集合中不同元素之間的間隔, 一般是為了對(duì)齊而存在。不同編譯器和平臺(tái)下,填充的數(shù)量可能會(huì)不同。 不要假設(shè)結(jié)構(gòu)的大小和成員的位置在任何編譯器和平臺(tái)下都是相同的。 不要一次性讀取或者寫(xiě)入一整個(gè)結(jié)構(gòu)體,因?yàn)閷?xiě)入的程序可能會(huì)使用和讀取的程序不同的填充方式。對(duì)于域也同樣適用。
            類(lèi)型大小
            不同數(shù)據(jù)類(lèi)型的大小隨編譯器和平臺(tái)而不同。 在C/C++中, 內(nèi)置類(lèi)型的大小完全取決于編譯器(在特定范圍內(nèi)). 不要讀寫(xiě)大小不明確的數(shù)據(jù)類(lèi)型。也就是說(shuō),不要讀寫(xiě)bool, enum, long, int, short, float, 或者double類(lèi)型.(譯者注:linux下要使用下面跨平臺(tái)符號(hào),要加載頭文件<arpa/inet.h>,此外在C99已經(jīng)增加了一個(gè)頭文件stdint.h,支持標(biāo)準(zhǔn)的,可移植的整數(shù)類(lèi)型集合,此文件被包含在<inttypes.h>)
            用這些
            替代這些...
            int8, uint8
            char, signed char, unsigned char, enum, bool
            int16, uint16
            short, signed short, unsigned short, enum
            int32, uint32
            int, signed int, unsigned int, long, signed long, unsigned long, enum
            int64, uint64
            long, signed long, unsigned long
            int128, uint128
            long long, signed long long, unsigned long long
            float32
            float
            float64
            double
             
            Data Type Ranges
            C/C++ recognizes the types shown in the table below.
            Type Name
            Bytes
            Other Names
            Range of Values
            int
            *
            signed,
            signed int
            System dependent
            unsigned int
            *
            unsigned
            System dependent
            __int8
            1
            char,
            signed char
            –128 to 127
            __int16
            2
            short,
            short int,
            signed short int
            –32,768 to 32,767
            __int32
            4
            signed,
            signed int
            –2,147,483,648 to 2,147,483,647
            __int64
            8
            none
            –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
            char
            1
            signed char
            –128 to 127
            unsigned char
            1
            none
            0 to 255
            short
            2
            short int,
            signed short int
            –32,768 to 32,767
            unsigned short
            2
            unsigned short int
            0 to 65,535
            long
            4
            long int,
            signed long int
            –2,147,483,648 to 2,147,483,647
            unsigned long
            4
            unsigned long int
            0 to 4,294,967,295
            enum
            *
            none
            Same as int
            float
            4
            none
            3.4E +/- 38 (7 digits)
            double
            8
            none
            1.7E +/- 308 (15 digits)
            long double
            10
            none
            1.2E +/- 4932 (19 digits)
             
                The long double data type (80-bit, 10-byte precision) is mapped directly to double (64-bit, 8- byte precision) in Windows NT and Windows 95.
                Signed and unsigned are modifiers that can be used with any integral type. The char type is signed by default, but you can specify /J to make it unsigned by default.
                The int and unsigned int types have the size of the system word. This is two bytes (the same as short and unsigned short) in MS-DOS and 16-bit versions of Windows, and 4 bytes in 32-bit operating systems. However, portable code should not depend on the size of int.
                Microsoft C/C++ also features support for sized integer types. See __int8, __int16, __int32, __int64 for more information. Also see Integer Limits.
                   此外,顯示個(gè)32位與64位平臺(tái)之間的差異示例:
            對(duì)于 Linux on POWERILP 32 模型用于 32 位環(huán)境中,而 LP64 用于 64 位環(huán)境中。這兩種模型之間的區(qū)別在于長(zhǎng)整型和指針的大小。
            系統(tǒng)中可以有兩種不同的數(shù)據(jù)類(lèi)型:基本數(shù)據(jù)類(lèi)型和衍生數(shù)據(jù)類(lèi)型。
            基本數(shù)據(jù)類(lèi)型是 C C++ 語(yǔ)言規(guī)范定義的所有數(shù)據(jù)類(lèi)型。下表對(duì) Linux on POWER Solaris 中的基本數(shù)據(jù)類(lèi)型進(jìn)行了比較:
            4:基本數(shù)據(jù)類(lèi)型
             
            Linux on POWER
            Solaris
            基本類(lèi)型
            ILP32
            LP64
            ILP32
            LP64
            char
            8
            8
            8
            8
            short
            16
            16
            16
            16
            init
            32
            32
            32
            32
            float
            32
            32
            32
            32
            long
            32
            64
            32
            64
            pointer
            32
            64
            32
            64
            long long
            64
            64
            64
            64
            double
            64
            64
            64
            64
            long double
            64/128*
            64/128*
            128
            128
            5. 衍生數(shù)據(jù)類(lèi)型
            OS
            gid_t
            mode_t
            pid_t
            uid_t
            wint_t
            Solaris ILP32 l
            long
            unsigned long
            long
            long
            long
            Solaris LP64
            int
            unsigned int
            int
            int
            int
            Linux ILP32
            unsigned int
            unsigned int
            int
            unsigned int
            unsigned int
            Linux ILP64
            unsigned int
            unsigned int
            int
            unsigned int
            unsigned int
             
            字節(jié)順序
            字節(jié)順序,就是字節(jié)在內(nèi)存中存儲(chǔ)的順 序。 不同的處理器存儲(chǔ)多字節(jié)數(shù)據(jù)的順序是不同的。小端處理器由低到高存儲(chǔ)(換句話(huà)說(shuō),和書(shū)寫(xiě)的順序相反).。大端處理器由高到低存儲(chǔ)(和書(shū)寫(xiě)順序相同)。如果 數(shù)值的字節(jié)順序和讀寫(xiě)它的處理器不同,它必須被事先轉(zhuǎn)化。同時(shí),為了標(biāo)準(zhǔn)化網(wǎng)絡(luò)傳輸?shù)淖止?jié)順序,定義了網(wǎng)絡(luò)字節(jié)順序。詳細(xì)內(nèi)容參考本人另一篇blog:  網(wǎng)絡(luò)通訊中字節(jié)排列順序轉(zhuǎn)化
            char - 有符號(hào)還是無(wú)符號(hào)?
            一個(gè)鮮為人知的事實(shí),char默認(rèn)可以是有符號(hào)的也可以是無(wú)符號(hào)的-完全取決于編譯器。結(jié)果導(dǎo)致你從char轉(zhuǎn)化為其他類(lèi)型的時(shí)候(比如int),結(jié)果會(huì)因編譯器而不同。 例如:

            char   x;
            int    y;
            read( fd, &x, 1 );   // 讀取一個(gè)byte值為0xff
            y = x;               // y 是 255 或者 -1, 依賴(lài)編譯器

            不要把數(shù)據(jù)讀入一般的char。明確指定是有符號(hào)或者無(wú)符號(hào)的

            posted @ 2012-05-19 09:51 多彩人生 閱讀(451) | 評(píng)論 (0)編輯 收藏

            指令關(guān)鍵字volatile

            就象大家更熟悉的const一樣,volatile是一個(gè)類(lèi)型修飾符(type specifier)。它是被設(shè)計(jì)用來(lái)修飾被不同線程訪問(wèn)和修改的變量。如果沒(méi)有volatile,基本上會(huì)導(dǎo)致這樣的結(jié)果:要么無(wú)法編寫(xiě)多線程程序,要么編譯器失去大量?jī)?yōu)化的機(jī)會(huì)。

            見(jiàn)百度百科
            http://baike.baidu.com/view/608706.htm

            posted @ 2012-05-18 11:31 多彩人生 閱讀(233) | 評(píng)論 (0)編輯 收藏

            LocalAlloc,VirtualAlloc,malloc,new的異同

               首先明白幾個(gè)概念:虛擬內(nèi)存是從硬盤(pán)置換出來(lái)的,堆本身就是內(nèi)存,程序運(yùn)行時(shí),可用內(nèi)存=物理內(nèi)存+虛擬內(nèi)存。虛擬內(nèi)存一般用文件來(lái)保存數(shù)據(jù),虛擬內(nèi)存的 出現(xiàn)主要是因?yàn)橐郧皟?nèi)存不夠(16M的內(nèi)存剛出來(lái)的時(shí)候可是天價(jià)啊),磁盤(pán)相對(duì)便宜一些,所以聰明的系統(tǒng)設(shè)計(jì)者就把設(shè)計(jì)了虛擬內(nèi)存,在程序運(yùn)行的時(shí)候把那 些很久沒(méi)有被訪問(wèn)過(guò)的(可能以后也不會(huì)用到)內(nèi)存映射到文件里面去(以后需要的時(shí)候再讀進(jìn)內(nèi)存),把內(nèi)存騰出來(lái)給真正需要執(zhí)行的代碼和數(shù)據(jù),這樣看起來(lái)可 用內(nèi)存就比物理內(nèi)存多了。
                   HeapAlloc()是堆分配內(nèi)存函數(shù),查看c,c++的malloc,new函數(shù)的代碼,可以看到就是對(duì)HeapAlloc()函數(shù)的封裝,在堆上可以動(dòng)態(tài)分配內(nèi)存。
            1. 首先我們來(lái)看HeapAlloc:
            MSDN 上的解釋為:HeapALloc是從堆上分配一塊內(nèi)存,且分配的內(nèi)存是不可移動(dòng)的(即如果沒(méi)有連續(xù)的空間能滿(mǎn)足分配的大小,程序不能將其他零散的 空間利用起來(lái),從而導(dǎo)致分配失敗),該分配方法是從一指定地址開(kāi)始分配,而不像GloabalAlloc是從全局堆上分配,這個(gè)有可能是全局,也有可能是 局部。函數(shù)原型為:
            LPVOID
            HeapAlloc(
                HANDLE hHeap,
                DWORD dwFlags,
               SIZE_T dwBytes
                );
            hHeap是進(jìn)程堆內(nèi)存開(kāi)始位置。
            dwFlags是分配堆內(nèi)存的標(biāo)志。包括HEAP_ZERO_MEMORY,即使分配的空間清零。
            dwBytes是分配堆內(nèi)存的大小。
            其對(duì)應(yīng)的釋放空間函數(shù)為HeapFree。
            2. 再看GlobalAlloc:該函數(shù)用于從全局堆中分配出內(nèi)存供程序使用,函數(shù)原型為:
            HGLOBAL GlobalAlloc(
            UINT uFlags,
            SIZE_T dwBytes
            );
            uFlags參數(shù)含義
            GHND   GMEM_MOVEABLE和GMEM_ZEROINIT的組合
            GMEM_FIXED   分配固定內(nèi)存,返回值是一個(gè)指針
            GMEM_MOVEABLE   分配活動(dòng)內(nèi)存,在Win32中,內(nèi)存塊不能在物理內(nèi)存中移動(dòng),但能在默認(rèn)的堆中移動(dòng)。返回值是內(nèi)存對(duì)象的句柄,用函數(shù)GlobalLock可將句柄轉(zhuǎn)化為指針
            GMEM_ZEROINIT   將內(nèi)存內(nèi)容初始化為零
            GPTR   GMEM_FIXED和GMEM_ZEROINIT的組合
            一 般情況下我們?cè)诰幊痰臅r(shí)候,給應(yīng)用程序分配的內(nèi)存都是可以移動(dòng)的或者是可以丟棄的,這樣能使有限的內(nèi)存資源充分利用,所以,在某一個(gè)時(shí)候我們分配的那塊 內(nèi)存的地址是不確定的,因?yàn)樗强梢砸苿?dòng)的,所以得先鎖定那塊內(nèi)存塊,這兒應(yīng)用程序需要調(diào)用API函數(shù)GlobalLock函數(shù)來(lái)鎖定句柄。如下: lpMem=GlobalLock(hMem); 這樣應(yīng)用程序才能存取這塊內(nèi)存。所以我們?cè)谑褂肎lobalAllock時(shí),通常搭配使用GlobalLock,當(dāng)然在不使用內(nèi)存時(shí),一定記得使用 GlobalUnlock,否則被鎖定的內(nèi)存塊一直不能被其他變量使用。
            GlobalAlloc對(duì)應(yīng)的釋放空間的函數(shù)為GlobalFree。
            3. LocalAlloc:該函數(shù)用于從局部堆中分配內(nèi)存供程序使用,函數(shù)原型為:
            HLOCAL LocalAlloc(
            UINT uFlags,
            SIZE_T uBytes
            );
            參數(shù)同GlobalAlloc。
            在 16位Windows中是有區(qū)別的,因?yàn)樵?6位windows用一個(gè)全局堆和局部堆來(lái)管理內(nèi)存,每一個(gè)應(yīng)用程序或dll裝入內(nèi)存時(shí),代碼段被裝入全局 堆,而系統(tǒng)又為每個(gè)實(shí)例從全局堆中分配了一個(gè)64kb的數(shù)據(jù)段作為該實(shí)例的局部堆,用來(lái)存放應(yīng)用程序的堆棧和所有全局或靜態(tài)變量。而 LocalAlloc/GlobalAlloc就是分別用于在局部堆或全局堆中分配內(nèi)存。
            由于每個(gè)進(jìn)程的局部堆很小,所以在局部堆中分配內(nèi)存會(huì)受到空間的限制。但這個(gè)堆是每個(gè)進(jìn)程私有的,相對(duì)而言分配數(shù)據(jù)較安全,數(shù)據(jù)訪問(wèn)出錯(cuò)不至于影響到整個(gè)系統(tǒng)。
            而在全局堆中分配的內(nèi)存是為各個(gè)進(jìn)程共享的,每個(gè)進(jìn)程只要擁有這個(gè)內(nèi)存塊的句柄都可以訪問(wèn)這塊內(nèi)存,但是每個(gè)全局內(nèi)存空間需要額外的內(nèi)存開(kāi)銷(xiāo),造成分配浪費(fèi)。而且一旦發(fā)生嚴(yán)重錯(cuò)誤,可能會(huì)影響到整個(gè)系統(tǒng)的穩(wěn)定。
            不 過(guò)在Win32中,每個(gè)進(jìn)程都只擁有一個(gè)省缺的私有堆,它只能被當(dāng)前進(jìn)程訪問(wèn)。應(yīng)用程序也不可能直接訪問(wèn)系統(tǒng)內(nèi)存。所以在Win32中全局堆和局部堆都 指向進(jìn)程的省缺堆。用LocalAlloc/GlobalAlloc分配內(nèi)存沒(méi)有任何區(qū)別。甚至LocalAlloc分配的內(nèi)存可以被 GlobalFree釋放掉。所以在Win32下編程,無(wú)需注意Local和Global的區(qū)別,一般的內(nèi)存分配都等效于 HeapAlloc(GetProcessHeap(),...)。
            LocalAlloc對(duì)應(yīng)的釋放函數(shù)為L(zhǎng)ockFree。
            4. VirtualAlloc:該函數(shù)的功能是在調(diào)用進(jìn)程的虛地址空間,預(yù)定或者提交一部分頁(yè),如果用于內(nèi)存分配的話(huà),并且分配類(lèi)型未指定MEM_RESET,則系統(tǒng)將自動(dòng)設(shè)置為0;其函數(shù)原型:
            LPVOID VirtualAlloc(
            LPVOID lpAddress, // region to reserve or commit
            SIZE_T dwSize, // size of region
            DWORD flAllocationType, // type of allocation
            DWORD flProtect // type of access protection
            );
            VirtualAlloc 可以通過(guò)并行多次調(diào)用提交一個(gè)區(qū)域的部分或全部來(lái)保留一個(gè)大的內(nèi)存區(qū)域。多重調(diào)用提交同一塊區(qū)域不會(huì)引起失敗。這使得一個(gè)應(yīng)用程 序保留內(nèi)存后可以隨意提交將被寫(xiě)的頁(yè)。當(dāng)這種方式不在有效的時(shí)候,它會(huì)釋放應(yīng)用程序通過(guò)檢測(cè)被保留頁(yè)的狀態(tài)看它是否在提交調(diào)用之前已經(jīng)被提交。
            VirtualAlloc對(duì)應(yīng)的釋放函數(shù)為VirtualFree。
            5.Malloc:malloc 與free是C++/C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)函數(shù),可用于申請(qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存。對(duì)于非內(nèi)部數(shù)據(jù)類(lèi)型的對(duì)象而言,光用 malloc/free無(wú)法滿(mǎn)足動(dòng)態(tài)對(duì)象的要求。對(duì)象在創(chuàng)建的同時(shí)要自動(dòng)執(zhí)行構(gòu)造函數(shù),對(duì)象在消亡之前要自動(dòng)執(zhí)行析構(gòu)函數(shù)。由于malloc/free是 庫(kù)函數(shù)而不是運(yùn)算符,不在編譯器控制權(quán)限之內(nèi),不能夠把執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)的任務(wù)強(qiáng)加于malloc/free。
            6.New:new/delete 是C++的運(yùn)算符。可用于申請(qǐng)動(dòng)態(tài)內(nèi)存和釋放內(nèi)存。C++語(yǔ)言需要一個(gè)能完成動(dòng)態(tài)內(nèi)存分配和初始化工作的運(yùn)算符new, 以一個(gè)能完成清理與釋放內(nèi)存工作的運(yùn)算符delete。注意new/delete不是庫(kù)函數(shù)。C++程序經(jīng)常要調(diào)用C函數(shù),而C程序只能用malloc /free管理動(dòng)態(tài)內(nèi)存。new 是個(gè)操作符,和什么"+","-","="...有一樣的地位.
                    malloc是個(gè)分配內(nèi)存的函數(shù),供你調(diào)用的.
                    new是保留字,不需要頭文件支持.
                    malloc需要頭文件庫(kù)函數(shù)支持.new 建立的是一個(gè)對(duì)象,
                    malloc分配的是一塊內(nèi)存.
                    new建立的對(duì)象你可以把它當(dāng)成一個(gè)普通的對(duì)象,用成員函數(shù)訪問(wèn),不要直接訪問(wèn)它的地址空間
                    malloc分配的是一塊內(nèi)存區(qū)域,就用指針訪問(wèn)好了,而且還可以在里面移動(dòng)指針.
            內(nèi)存泄漏對(duì)于malloc或者new都可以檢查出來(lái)的,區(qū)別在于new可以指明是那個(gè)文件的那一行,而malloc沒(méi)有這些信息。new可以認(rèn)為是malloc加構(gòu)造函數(shù)的執(zhí)行。new出來(lái)的指針是直接帶類(lèi)型信息的。而malloc返回的都是void指針。

            posted @ 2012-05-18 10:29 多彩人生 閱讀(510) | 評(píng)論 (0)編輯 收藏

            Stopwatch類(lèi)

            提供一組方法和屬性,可用于準(zhǔn)確地測(cè)量運(yùn)行時(shí)間。

            posted @ 2012-05-17 14:18 多彩人生 閱讀(391) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共25頁(yè): First 13 14 15 16 17 18 19 20 21 Last 

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆分類(lèi)

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久精品国产一区二区三区不卡| 色噜噜狠狠先锋影音久久| 久久夜色精品国产噜噜亚洲a| 久久久久婷婷| 久久久亚洲欧洲日产国码二区| 久久国产精品成人免费| 久久精品中文无码资源站| 久久精品国产免费一区| 久久无码中文字幕东京热| 久久99精品综合国产首页| 亚洲人AV永久一区二区三区久久| 国产精品久久久久久福利漫画| 亚洲日本久久久午夜精品| 久久精品九九亚洲精品天堂 | 99久久婷婷国产综合亚洲| 无码8090精品久久一区| 国产91色综合久久免费分享| 久久久精品人妻一区二区三区蜜桃| 国产精品久久久久久| 国产亚洲欧美精品久久久 | 久久精品国产免费一区| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久99亚洲综合精品首页| 91精品国产9l久久久久| 天天躁日日躁狠狠久久| 久久亚洲AV无码精品色午夜| 日产久久强奸免费的看| 国产高潮国产高潮久久久91| 久久青草国产手机看片福利盒子| 久久精品国产亚洲AV高清热| 久久精品国产亚洲AV嫖农村妇女 | 亚洲va中文字幕无码久久不卡| 性做久久久久久久久| 日韩一区二区三区视频久久| 久久精品国产精品亚洲艾草网美妙| 91精品国产色综久久| 国产午夜精品久久久久九九| 国产精品免费久久| 久久亚洲国产成人影院网站| 亚洲欧美成人久久综合中文网 | 久久精品免费观看|