2015年1月7日
原文地址: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: 4294967168, 128
%d: -128, 128
------------------------
%c: ,
%X: 7F, 7F
%u: 127, 127
%d: 127, 127
請(qǐng)按任意鍵繼續(xù). . .
由此可見,最高位若為0時(shí),二者沒有區(qū)別;若為非0時(shí),則有區(qū)別了。
2010年6月13日
摘要: Linux系統(tǒng)下,需要大量的命令行選項(xiàng),如果自己手動(dòng)解析他們的話實(shí)在是有違軟件復(fù)用的思想,不過還好,GNU C library留給我們一個(gè)解析命令行的接口(X/Open規(guī)范),好好使用它可以使你的程序改觀不少。 使用getopt_long()需要引入頭文件:#include<getopt.h> &nbs... 閱讀全文
2010年5月26日
2010年1月4日
摘要: 最近在學(xué)習(xí)Linux下的C編程,買了一本叫《Linux環(huán)境下的C編程指南》讀到makefile就越看越迷糊,可能是我的理解能不行。
于是google到了以下這篇文章。通俗易懂。然后把它貼出來,方便學(xué)習(xí)。
 ... 閱讀全文
2010年1月3日
摘要: 代碼覆蓋率的測(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è)試... 閱讀全文
2009年3月5日
摘要: 寫在前面的話:對(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è)... 閱讀全文
今天做了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
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 |
解決辦法:
然后運(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