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

            興海北路

            ---男兒仗劍自橫行
            <2010年6月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            統(tǒng)計(jì)

            • 隨筆 - 85
            • 文章 - 0
            • 評(píng)論 - 17
            • 引用 - 0

            常用鏈接

            留言簿(6)

            隨筆分類

            隨筆檔案

            收藏夾

            全是知識(shí)啊

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            2015年1月7日

            (轉(zhuǎn)載)char與unsigned char的本質(zhì)區(qū)別

            原文地址:http://www.cnblogs.com/qytan36/archive/2010/09/27/1836569.html

                  在C中,默認(rèn)的基礎(chǔ)數(shù)據(jù)類型均為signed,現(xiàn)在我們以char為例,說明(signed)char與unsigned char之間的區(qū)別。

                  首先在內(nèi)存中,char與unsigned char沒有什么不同,都是一個(gè)字節(jié),唯一的區(qū)別是,char的最高位為符號(hào)位,因此char能表示的范圍是-128~127,unsigned char沒有符號(hào)位,因此能表示的范圍是0~255,這個(gè)好理解,8個(gè)bit,最多256種情況,因此無論如何都能表示256個(gè)數(shù)字。

                  在實(shí)際使用過程中有什么區(qū)別呢?

                  主要是符號(hào)位,但是在普通的賦值,讀寫文件和網(wǎng)絡(luò)字節(jié)流都沒什么區(qū)別,反正就是一個(gè)字節(jié),不管最高位是什么,最終讀取結(jié)果都一樣,只是你怎么理解最高位而已,在屏幕上面的顯示可能不一樣。

                  但是我們卻發(fā)現(xiàn)在表示byte時(shí),都用unsigned char,這是為什么呢?

                  首先我們通常意義上理解,byte沒有什么符號(hào)位之說,更重要的是如果將byte的值賦給int,long等數(shù)據(jù)類型時(shí),系統(tǒng)會(huì)做一些額外的工作。

                  如果是char,那么系統(tǒng)認(rèn)為最高位是符號(hào)位,而int可能是16位或者32位,那么系統(tǒng)會(huì)對(duì)最高位做擴(kuò)展(注意,賦給unsigned int也會(huì)做擴(kuò)展),而如果是unsigned char,那么系統(tǒng)不會(huì)做擴(kuò)展。

                  這就是二者的最大區(qū)別。

                  同理可以推導(dǎo)到其他的類型,比如short,unsigned short,等等。

                  具體可以通過下面的小例子看看其區(qū)別:

                  

            #include<stdio.h>

            void f(unsigned char v)
            {
                
            char c = v;
                unsigned 
            char uc = v;
                unsigned 
            int a = c, b = uc;
                
            int i = c, j = uc;
                printf(
            "------------------------\n");
                printf(
            "%%c: %c, %c\n", c, uc);
                printf(
            "%%X: %X, %X\n", c, uc);
                printf(
            "%%u: %u, %u\n", a, b);
                printf(
            "%%d: %d, %d\n", i, j);
            }


            int main(int argc, char *argv[])
            {
                f(
            0x80);
                f(
            0x7F);
                
            return 0;
            }

                  輸出結(jié)果:

            ------------------------
            %c: €, €
            %X: FFFFFF80, 80
            %u: 4294967168128
            %d: -128128
            ------------------------
            %c: , 
            %X: 7F, 7F
            %u: 127127
            %d: 127127
            請(qǐng)按任意鍵繼續(xù). . .


                  由此可見,最高位若為0時(shí),二者沒有區(qū)別;若為非0時(shí),則有區(qū)別了。



            posted @ 2015-01-07 11:52 隨意門| 編輯 收藏

            2010年6月13日

            C語言:getopt_long()函數(shù)的作用

                 摘要:     Linux系統(tǒng)下,需要大量的命令行選項(xiàng),如果自己手動(dòng)解析他們的話實(shí)在是有違軟件復(fù)用的思想,不過還好,GNU C library留給我們一個(gè)解析命令行的接口(X/Open規(guī)范),好好使用它可以使你的程序改觀不少。    使用getopt_long()需要引入頭文件:#include<getopt.h> &nbs...  閱讀全文

            posted @ 2010-06-13 15:32 隨意門 閱讀(7917) | 評(píng)論 (0)編輯 收藏

            2010年5月26日

            10個(gè)評(píng)委打分,去掉一個(gè)最高分,去掉一個(gè)最低分,求平均分,并對(duì)評(píng)委進(jìn)行評(píng)判

            對(duì)評(píng)委進(jìn)行評(píng)判,即在10個(gè)評(píng)委中找出最公平(即評(píng)分最接近平均分)和最不公平(即與平均分的差距最大)的評(píng)委。我實(shí)現(xiàn)的代碼如下面所示,請(qǐng)大家給予點(diǎn)評(píng),我接觸C語言很長時(shí)間了,但是掌握的很不好,這次想多寫點(diǎn)程序,來提高水平 ,希望各位多給點(diǎn)指導(dǎo),謝謝大家!

             1#include <iostream>
             2#include <cmath>
             3using namespace std;
             4
             5int main()
             6{
             7// max:保存最高分;min:保存最低分;sum:保存總分;avg:保存平均分
             8    int i, max, min, sum, avg;
             9    max = -32768;
            10    min = 32767;
            11    sum = 0;
            12    int p[10];
            13
            14// 將評(píng)委的打分存在數(shù)組p中,求出平均分
            15    for (i = 1; i <= 10; i++)
            16    {
            17        cout << "Input number " << i << "";
            18        cin >> p[i - 1];
            19
            20        if (p[i - 1> max)
            21        {
            22            max = p[i - 1];
            23        }

            24        if (p[i - 1< min)
            25        {
            26            min = p[i - 1];
            27        }

            28        sum += p[i - 1];
            29    }

            30
            31    cout << "Canceled max score:" << max 
            32        << " Canceled min score:" << min << endl;
            33
            34    cout << "Average score:" << (avg = (sum - max - min)/8<< endl;
            35
            36// 比較每個(gè)評(píng)委打分同平均值的絕對(duì)值,求出差距最大和最小的評(píng)委
            37    max = -32768;
            38    min = 32767;
            39    int badguy = -1;
            40    int goodguy = -1;
            41
            42    for (i = 0; i < 10; i++)
            43    {
            44        if (abs(p[i]-avg) > max)
            45        {
            46            max = p[i] - avg;
            47            badguy = i + 1;
            48        }

            49    }

            50    for (i = 0; i < 10; i++)
            51    {
            52        if (abs(p[i] - avg) < min)
            53        {
            54            min = p[i] - avg;
            55            goodguy = i + 1;
            56        }

            57    }

            58
            59    cout << "goodguy is " << goodguy << endl;
            60    cout << "badguy is "  << badguy << endl;
            61
            62    return 0;
            63}

            posted @ 2010-05-26 17:16 隨意門 閱讀(8246) | 評(píng)論 (2)編輯 收藏
            實(shí)現(xiàn)函數(shù)y=x*x的圖形與圓的圖形疊加顯示

             1/************************************************************************
             2    與sin(x)和cos(x)疊加顯示是一個(gè)思路,沒有考慮算法的時(shí)間復(fù)雜度;
             3    打印圓時(shí)利用圖形的左右對(duì)稱性。根據(jù)圓的方程:
             4                R*R = X*X + Y*Y
             5    可以計(jì)算出圓上每一點(diǎn)行和列的關(guān)系。
             6************************************************************************/

             7#include <iostream>
             8#include <cmath>
             9using namespace std;
            10
            11int main()
            12{
            13    double y;
            14    int x, m, n;
            15
            16    for (y = 10; y >= -10; y--)
            17    {
            18        m = 1.9*sqrt(100 - y*y);
            19        n = 1.9*sqrt(y);
            20        
            21        for (x = 1; x <= 30; x++)
            22        {
            23            if (x == n && x == m)
            24            {
            25                cout << "+";
            26            }

            27            else if (x == 30 - m)
            28            {
            29                cout << "+";
            30            }

            31            else if (x == 30 - n)
            32            {
            33                cout << "*";
            34            }

            35            else
            36                cout << " ";
            37        }

            38
            39        for (; x <= 60; x++)
            40        {
            41            if (x == n && x == m)
            42            {
            43                cout << "+";
            44            }

            45            else if (x == 30 + m)
            46            {
            47                cout << "+";
            48            }

            49            else if (x == 30 + n)
            50            {
            51                cout << "*";
            52            }

            53            else
            54                cout << " ";
            55        }

            56        cout << endl;
            57    }

            58
            59    return 0;
            60}

            posted @ 2010-05-26 14:57 隨意門 閱讀(752) | 評(píng)論 (1)編輯 收藏
            實(shí)現(xiàn)0~360度sin(x)曲線與cos(x)曲線圖形的同時(shí)顯示

             c語言趣味編程百例精解中的習(xí)題,參考了該書中的頭兩個(gè)例子:假定圖形的總寬度為62列,cos(x)曲線用"+"表示,sin(x)曲線用"*"表示。

             1#include <iostream>
             2#include <cmath>
             3using namespace std;
             4
             5int main()
             6{
             7    double y;
             8    int m, n, x, yy;
             9
            10    for (yy = 0; yy <= 20; yy++)
            11    {
            12        y = yy * 0.1;
            13        m = acos(1 - y)*10;    /* m:cos(x)曲線上y點(diǎn)對(duì)應(yīng)的坐標(biāo)列 */
            14        n = asin(1 - y)*10/* n:sin(x)曲線上y點(diǎn)對(duì)應(yīng)的坐標(biāo)列 */
            15
            16        for (x = 0; x <= 31; x++/* 0~180度的圖像顯示 */
            17        {
            18            if (x == n && x == m)    /* 相交時(shí)打印'+' */
            19            {
            20                cout << "+";
            21            }

            22            else if (x == m || x == 62 - m)  /* 打印不相交時(shí)的cos(x)曲線圖形 */
            23            {
            24                cout << "+";
            25            }

            26            else if (x == n || x == 31 - n ) /* 打印不相交時(shí)的sin(x)曲線圖形 */
            27            {
            28                cout << "*";
            29            }

            30            else
            31                cout << " ";                /* 其他情況打印空格 */
            32        }

            33        for (; x <= 62; x++/* 180~360度的圖像顯示 */
            34        {
            35            if (x == n && x == m)
            36            {
            37                cout << "+";
            38            }

            39            else if (x == m || x == 62 - m)
            40            {
            41                cout << "+";
            42            }

            43            else if (x == 31 - n || x == 62 + n)
            44            {
            45                cout << "*";
            46            }

            47            else
            48                cout << " ";
            49        }

            50        cout << endl;
            51    }

            52}

            posted @ 2010-05-26 13:55 隨意門 閱讀(1057) | 評(píng)論 (0)編輯 收藏

            2010年1月4日

            Linux makefile 教程 非常詳細(xì),且易懂

                 摘要: 最近在學(xué)習(xí)Linux下的C編程,買了一本叫《Linux環(huán)境下的C編程指南》讀到makefile就越看越迷糊,可能是我的理解能不行。             于是google到了以下這篇文章。通俗易懂。然后把它貼出來,方便學(xué)習(xí)。      ...  閱讀全文

            posted @ 2010-01-04 11:09 隨意門 閱讀(1106) | 評(píng)論 (0)編輯 收藏

            2010年1月3日

            代碼覆蓋率的測(cè)試工具 -- gcov

                 摘要: 代碼覆蓋率的測(cè)試工具 -- gcov 2009-03-25 09:47 簡介在這章里,我們將會(huì)探討gcov實(shí)用程序,并且了解一下如何使用gcov來幫助測(cè)試與支持軟件配置與優(yōu)化。我們將會(huì)了解如何使用gcov來構(gòu)建軟件,并且理解他所提供的各種數(shù)據(jù)類型。最后,我們將探討當(dāng)執(zhí)行保險(xiǎn)測(cè)試...  閱讀全文

            posted @ 2010-01-03 12:03 隨意門 閱讀(2534) | 評(píng)論 (0)編輯 收藏

            2009年3月5日

            (轉(zhuǎn))用NET-SNMP軟件包開發(fā)簡單客戶端代理

                 摘要: 寫在前面的話:對(duì)于net-snmp我也是一個(gè)初學(xué)者,開始學(xué)習(xí)時(shí)也碰到了很多低級(jí)的問題。在很多論壇上(事實(shí)上比較少^_^, 建議大家直接去sourcefoge社區(qū)看關(guān)于net-snmp的mail-list),都沒有比較初級(jí)入門的文章,本著開源學(xué)習(xí)的精神,把自己的一點(diǎn)收獲,共享給大家。通過參考一些前輩的文章和幫助文檔,本文實(shí)現(xiàn)了一個(gè)簡單的mib,并編寫了文檔。本文主要面向初級(jí)學(xué)習(xí)者(我也是個(gè)...  閱讀全文

            posted @ 2009-03-05 15:28 隨意門 閱讀(7912) | 評(píng)論 (2)編輯 收藏
            (轉(zhuǎn))net-snmp服務(wù)的安裝

            今天做了snmp的測(cè)試,現(xiàn)把安裝配置方法分享如下:
               首先準(zhǔn)備安裝的源碼包:net-snmp-5.4.2.1.tar.gz
            1.解壓源碼包
              tar xvf net-snmp****
            2.創(chuàng)建安裝目錄
              mkdir /usr/local/net-snmp
            3.安裝
              ./configure --prefix=/usr/local/net-snmp
              make
              make install
            4.安裝成功cp配置文件到/usr/local/net-snmp/share/snmp/目錄下
              cp ./EXZAPLE.conf /usr/local/net-snmp/share/snmp/snmpd.conf
            5.修改配置文件
              #       sec.name  source          community
              #com2sec local     localhost       COMMUNITY
              #com2sec mynetwork NETWORK/24      COMMUNITY
              com2sec local     localhost       COMMUNITY
              com2sec mynetwork 192.168.1.186      public      //為允許的源地址
              com2sec mynetwork 192.168.1.254      public
              com2sec mynetwork 192.168.1.0/24      public     //為允許的源網(wǎng)絡(luò)
            6.編輯/etc/rc.local添加為自啟動(dòng)  
              添加下面一行:
              /usr/local/net-snmp/sbin/snmpd -c /usr/local/net-snmp/share/snmp/snmpd.conf &
            7.設(shè)置環(huán)境變量,編輯/etc/profile
              在export前添加下面一行
              PATH=/usr/local/net-snmp/bin:/usr/local/net-snmp/sbin:$PATH
            8.測(cè)試命令
              snmpget -v 1 -c "public" 192.168.1.236 .1.3.6.1.4.1.2021.10.1.3.1
              注:要在同樣安裝過net-snmp的機(jī)器上測(cè)或在安裝過第3方軟件(solarwinds等)的機(jī)器測(cè)試
                  該命令的最后一個(gè)字段為cpu的OID  
             
            #########################################################################
            問題補(bǔ)充:
                   上次裝好netsnmp并觀察了一段時(shí)間后發(fā)現(xiàn)獲取內(nèi)存,cpu信息等等都很正常,唯獨(dú)磁盤信息與預(yù)期有點(diǎn)出入,我們預(yù)期獲取磁盤所有分區(qū)的使用情況結(jié)果只獲取了/根分區(qū)的使用情況:
                   經(jīng)查證是配置文件snmpd.conf里的配置有關(guān):
            # disk checks
            #
            # The agent can check the amount of available disk space, and make
            # sure it is above a set limit.
            # disk PATH [MIN=DEFDISKMINIMUMSPACE]
            #
            # PATH:  mount path to the disk in question.
            # MIN:   Disks with space below this value will have the Mib's errorFlag set.
            #        Default value = DEFDISKMINIMUMSPACE.
            # Check the / partition and make sure it contains at least 10 megs.
            disk / 10000
            disk /home 10000
            # % snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.9
            # enterprises.ucdavis.diskTable.dskEntry.diskIndex.1 = 0
            # enterprises.ucdavis.diskTable.dskEntry.diskPath.1 = "/" Hex: 2F
            # enterprises.ucdavis.diskTable.dskEntry.diskDevice.1 = "/dev/dsk/c201d6s0"
            # enterprises.ucdavis.diskTable.dskEntry.diskMinimum.1 = 10000
            # enterprises.ucdavis.diskTable.dskEntry.diskTotal.1 = 837130
            # enterprises.ucdavis.diskTable.dskEntry.diskAvail.1 = 316325
            # enterprises.ucdavis.diskTable.dskEntry.diskUsed.1 = 437092
            # enterprises.ucdavis.diskTable.dskEntry.diskPercent.1 = 58
            # enterprises.ucdavis.diskTable.dskEntry.diskErrorFlag.1 = 0
            # enterprises.ucdavis.diskTable.dskEntry.diskErrorMsg.1 = ""
            因?yàn)榕渲梦募J(rèn)只有disk / 10000這一行;按此格式添加你期望獲取的磁盤或分區(qū);
            it‘s ok!!問題解決;
            驗(yàn)證cmd:
            snmpwalk -v 1 -c "public" 218.108.231.183 .1.3.6.1.4.1.2021.9.1
            snmpwalk -v 1 -c "public" 218.108.231.183 .1.3.6.1.4.1.2021.9.1.7
             

            posted @ 2009-03-05 13:55 隨意門 閱讀(743) | 評(píng)論 (0)編輯 收藏
            (轉(zhuǎn))net-snmp安裝手記

            Installing /usr/share/man/man3/NetSNMP::agent.3pm
            Installing /usr/share/man/man3/NetSNMP::OID.3pm
            Installing /usr/share/man/man3/NetSNMP::agent::default_store.3pm
            Installing /usr/share/man/man3/SNMP.3
            Installing /usr/share/man/man3/NetSNMP::netsnmp_request_infoPtr.3pm
            Installing /usr/share/man/man3/NetSNMP::default_store.3pm
            Installing /usr/share/man/man3/NetSNMP::ASN.3pm
            Installing /usr/share/man/man3/NetSNMP::TrapReceiver.3pm
            Writing /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi/auto/Bundle/NetSNMP/.packlist
            Appending installation info to /usr/lib/perl5/5.8.5/i386-linux-thread-multi/perllocal.pod
            make[1]: Leaving directory `/root/net-snmp-5.4.1/perl'




            [root@cgeek ~]# rpm -vih elfutils-devel-0.96-1.i386.rpm
            warning: elfutils-devel-0.96-1.i386.rpm: V3 DSA signature: NOKEY, key ID 4f2a6fd2
            error: Failed dependencies:
                    elfutils-libelf-devel = 0.96-1 is needed by elfutils-devel-0.96-1.i386
            [root@cgeek ~]# rpm -qa |grep elfutils
            elfutils-libelf-0.96-1
            elfutils-0.96-1
            [root@cgeek ~]# rpm -vih elfutils-libelf-devel-0.96-1.i386.rpm
            warning: elfutils-libelf-devel-0.96-1.i386.rpm: V3 DSA signature: NOKEY, key ID 4f2a6fd2
            Preparing...                ########################################### [100%]
               1:elfutils-libelf-devel ########################################### [100%]
            [root@cgeek ~]# rpm -vih elfutils-devel-0.96-1.i386.rpm
            warning: elfutils-devel-0.96-1.i386.rpm: V3 DSA signature: NOKEY, key ID 4f2a6fd2
            Preparing...                ########################################### [100%]
               1:elfutils-devel         ########################################### [100%]



            [root@cgeek ~]# /etc/rc.d/init.d/snmpd start
            啟動(dòng) snmpd:                                               [ 確定 ]



            http://blog.chinaunix.net/u2/62377/showart_490549.html

            一.環(huán)境
            OS:RHEL AS4
            net-snmp version:5.3.2
            二.步驟
            1.用root帳戶登錄
            2.運(yùn)行snmpwalk和snmpget命令,看是否已經(jīng)安裝snmp,如果已經(jīng)安裝就沒必要再安裝了;-)
            3.將net-snmp-5.3.2.tar.gz解壓(tar -zxvf net-snmp-5.3.2.tar.gz)
            4.進(jìn)入net-snmp-5.3.2目錄
            5.運(yùn)行./configure,根據(jù)提示輸入相應(yīng)信息
            6.運(yùn)行make
            7.運(yùn)行make install
            8.安裝完畢
            三.可能遇到的問題
            1.找不到libbeecrypt.la,在make時(shí)可能出現(xiàn)如下error

            libtool: link: cannot find the library `/usr/lib/libbeecrypt.la' (librpmio.la: /usr/lib/libbeecrypt.la)

            make[1]: *** [snmpd] Error 1

            make[1]: Leaving directory `/home/xxx/net-snmp-5.3.2/agent'

            make: *** [subdirs] Error 1

            解決辦法:
            http://sourceforge.net/projects/beecrypt下載beecrypt-4.1.2.tar.gz
            然后運(yùn)行如下命令:
            #tar -zxvf beecrypt-4.1.2.tar.gz
            #./configure -prefix=/usr(默認(rèn)是安裝在/usr/local,我們需要安裝在/usr目錄下)
            #make
            #make install
            2./usr/bin/ld: cannot find -lelf,在make時(shí)可能出現(xiàn)如下error

            /usr/bin/ld: cannot find -lelf

            collect2: ld returned 1 exit status

            make[1]: *** [snmpd] Error 1

            make[1]: Leaving directory `/home/xxx/net-snmp-5.3.2/agent'

            make: *** [subdirs] Error 1

            解決辦法:
            #ln -s libelf.so.1 /usr/lib/libelf.so
            3.我在安裝的過程中沒有碰到這個(gè)問題,在此作為參考
            echo /usr/local/lib >/etc/ld.so.conf.d/libnetsnmp.conf
            #/sbin/ldconfig -v
            #make install

            posted @ 2009-03-05 11:30 隨意門 閱讀(746) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題  下一頁
            久久亚洲AV成人无码电影| 一级女性全黄久久生活片免费 | 久久久这里有精品| 国产一区二区精品久久凹凸| 91视频国产91久久久| 精品久久久久中文字幕日本| 久久永久免费人妻精品下载| 久久SE精品一区二区| 久久精品国产99国产精品导航| 亚洲精品无码久久不卡| 亚洲国产精品综合久久网络| 色诱久久av| 亚洲一级Av无码毛片久久精品| 免费精品久久久久久中文字幕| 久久久久人妻精品一区三寸蜜桃| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 亚洲欧美日韩精品久久亚洲区| 青青草原综合久久大伊人导航| 色偷偷91久久综合噜噜噜噜 | 亚洲色欲久久久综合网| 亚洲精品乱码久久久久66| 亚洲AV无码久久| 精品熟女少妇av免费久久| 久久综合综合久久97色| 99久久亚洲综合精品成人| 国产精品永久久久久久久久久 | 久久人人爽人人爽人人片AV不| 久久精品无码一区二区无码| 国产一级做a爰片久久毛片| 久久九九亚洲精品| 久久久久一本毛久久久| 久久久精品国产| 久久er99热精品一区二区| 国产精品久久久久9999| 久久99精品国产麻豆蜜芽| 精品伊人久久大线蕉色首页| 亚洲va中文字幕无码久久 | 一本一道久久a久久精品综合 | 日本久久久久久久久久| 狠狠色婷婷久久综合频道日韩| 久久精品国产亚洲av影院|