2015年1月7日
原文地址:http://www.cnblogs.com/qytan36/archive/2010/09/27/1836569.html
在C中,默認的基礎(chǔ)數(shù)據(jù)類型均為signed,現(xiàn)在我們以char為例,說明(signed)char與unsigned char之間的區(qū)別。
首先在內(nèi)存中,char與unsigned char沒有什么不同,都是一個字節(jié),唯一的區(qū)別是,char的最高位為符號位,因此char能表示的范圍是-128~127,unsigned char沒有符號位,因此能表示的范圍是0~255,這個好理解,8個bit,最多256種情況,因此無論如何都能表示256個數(shù)字。
在實際使用過程中有什么區(qū)別呢?
主要是符號位,但是在普通的賦值,讀寫文件和網(wǎng)絡(luò)字節(jié)流都沒什么區(qū)別,反正就是一個字節(jié),不管最高位是什么,最終讀取結(jié)果都一樣,只是你怎么理解最高位而已,在屏幕上面的顯示可能不一樣。
但是我們卻發(fā)現(xiàn)在表示byte時,都用unsigned char,這是為什么呢?
首先我們通常意義上理解,byte沒有什么符號位之說,更重要的是如果將byte的值賦給int,long等數(shù)據(jù)類型時,系統(tǒng)會做一些額外的工作。
如果是char,那么系統(tǒng)認為最高位是符號位,而int可能是16位或者32位,那么系統(tǒng)會對最高位做擴展(注意,賦給unsigned int也會做擴展),而如果是unsigned char,那么系統(tǒng)不會做擴展。
這就是二者的最大區(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
請按任意鍵繼續(xù). . .
由此可見,最高位若為0時,二者沒有區(qū)別;若為非0時,則有區(qū)別了。
2010年6月13日
摘要: Linux系統(tǒng)下,需要大量的命令行選項,如果自己手動解析他們的話實在是有違軟件復(fù)用的思想,不過還好,GNU C library留給我們一個解析命令行的接口(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日
摘要: 代碼覆蓋率的測試工具 -- gcov
2009-03-25 09:47
簡介在這章里,我們將會探討gcov實用程序,并且了解一下如何使用gcov來幫助測試與支持軟件配置與優(yōu)化。我們將會了解如何使用gcov來構(gòu)建軟件,并且理解他所提供的各種數(shù)據(jù)類型。最后,我們將探討當(dāng)執(zhí)行保險測試... 閱讀全文
2009年3月5日
摘要: 寫在前面的話:對于net-snmp我也是一個初學(xué)者,開始學(xué)習(xí)時也碰到了很多低級的問題。在很多論壇上(事實上比較少^_^, 建議大家直接去sourcefoge社區(qū)看關(guān)于net-snmp的mail-list),都沒有比較初級入門的文章,本著開源學(xué)習(xí)的精神,把自己的一點收獲,共享給大家。通過參考一些前輩的文章和幫助文檔,本文實現(xiàn)了一個簡單的mib,并編寫了文檔。本文主要面向初級學(xué)習(xí)者(我也是個... 閱讀全文
今天做了snmp的測試,現(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添加為自啟動
添加下面一行:
/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.測試命令
snmpget -v 1 -c "public" 192.168.1.236 .1.3.6.1.4.1.2021.10.1.3.1
注:要在同樣安裝過net-snmp的機器上測或在安裝過第3方軟件(solarwinds等)的機器測試
該命令的最后一個字段為cpu的OID
#########################################################################
問題補充:
上次裝好netsnmp并觀察了一段時間后發(fā)現(xiàn)獲取內(nèi)存,cpu信息等等都很正常,唯獨磁盤信息與預(yù)期有點出入,我們預(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 = ""
因為配置文件默認只有disk / 10000這一行;按此格式添加你期望獲取的磁盤或分區(qū);
it‘s ok?。栴}解決;
驗證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
啟動 snmpd: [ 確定 ]
http://blog.chinaunix.net/u2/62377/showart_490549.html
一.環(huán)境
OS:RHEL AS4
net-snmp version:5.3.2
二.步驟
1.用root帳戶登錄
2.運行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.進入net-snmp-5.3.2目錄
5.運行./configure,根據(jù)提示輸入相應(yīng)信息
6.運行make
7.運行make install
8.安裝完畢
三.可能遇到的問題
1.找不到libbeecrypt.la,在make時可能出現(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 |
解決辦法:
然后運行如下命令:
#tar -zxvf beecrypt-4.1.2.tar.gz
#./configure -prefix=/usr(默認是安裝在/usr/local,我們需要安裝在/usr目錄下)
#make
#make install
2./usr/bin/ld: cannot find -lelf,在make時可能出現(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.我在安裝的過程中沒有碰到這個問題,在此作為參考
echo /usr/local/lib >/etc/ld.so.conf.d/libnetsnmp.conf
#/sbin/ldconfig -v
#make install