linux取整
1. linux下ll -h 和 -sh在不同系統上查看相同文件的大小不一樣,怎麼回事
Linux下ls命令和命令查看文件大小的區別:
ll-h 即為ls -lh是文件的實際大小;
-sh顯示文件所佔用的 block 大小;
註:用命令查看文件大小的時候,當文件只有1個位元組,也會佔用 4KB (inux默認是4k)。
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void ouch(int sig)
{
(void) signal(SIGINT, SIG_DFL);
int i;
for(i=0;i<3;i++)
printf("%d\n",(int) (((double)rand())/RAND_MAX*10) );
}
int main()
{
(void) signal(SIGINT, ouch);
while(1) {
printf("請按下Ctrl+c產生隨機數\n");
sleep(1);
}
}
rand()產生0到RAND_MAX的整數,((double)rand() )/RAND_MAX為0到1的小數,再乘以10取整得到1到10的隨機整數
3. Linux Bonding 怎麼玩
一、什麼是bondingLinux bonding 驅動提供了一個把多個網路介面設備捆綁為單個的網路介面設置來使用,用於網路負載均衡及網路冗餘二、bonding應用方向1、網路負載均衡對於bonding的網路負載均衡是我們在文件伺服器中常用到的,比如把三塊網卡,當做一塊來用,解決一個IP地址,流量過大,伺服器網路壓力過大的問題。對於文件伺服器來說,比如NFS或SAMBA文件伺服器,沒有任何一個管理員會把內部網的文件伺服器的IP地址弄很多個來解決網路負載的問題。如果在內網中,文件伺服器為了管理和應用上的方便,大多是用同一個IP地址。對於一個百M的本地網路來說,文件伺服器在多 個用戶同時使用的情況下,網路壓力是極大的,特別是SAMABA和NFS伺服器。為了解決同一個IP地址,突破流量的限制,畢竟網線和網卡對數據的吞吐量是有限制的。如果在有限的資源的情況下,實現網路負載均衡,最好的辦法就是 bonding 2、網路冗餘對於伺服器來說,網路設備的穩定也是比較重要的,特別是網卡。在生產型的系統中,網卡的可靠性就更為重要了。在生產型的系統中,大多通過硬體設備的冗餘來提供伺服器的可靠性和安全性,比如電源。bonding 也能為網卡提供冗餘的支持。把多塊網卡綁定到一個IP地址,當一塊網卡發生物理性損壞的情況下,另一塊網卡自動啟用,並提供正常的服務,即:默認情況下只有一塊網卡工作,其它網卡做備份三、bonding實驗環境及配置1、實驗環境系統為:CentOS,使用4塊網卡(eth0、eth1 ==> bond0;eth2、eth3 ==> bond1)來實現bonding技術2、bonding配置第一步:先查看一下內核是否已經支持bonding1)如果內核已經把bonding編譯進內核,那麼要做的就是載入該模塊到當前內核;其次查看ifenslave該工具是否也已經編譯modprobe -l bond*或者 modinfo bondingmodprobe bondinglsmod | grep 'bonding'echo 'modprobe bonding &> /dev/null' >> /etc/rc.local(開機自動載入bonding模塊到內核)which ifenslave注意:默認內核安裝完後就已經支持bonding模塊了,無需要自己手動編譯2)如果bonding還沒有編譯進內核,那麼要做的就是編譯該模塊到內核(1)編譯bondingtar -jxvf kernel-XXX.tar.gzcd kernel-XXXmake menuconfig選擇 " Network device support " -> " Bonding driver support "make bzImagemake moles && make moles_installmake install(2)編譯ifenslave工具gcc -Wall -O -I kernel-XXX/include ifenslave.c -o ifenslave第二步:主要有兩種可選擇(第1種:實現網路負載均衡,第2種:實現網路冗餘)例1:實現網路冗餘(即:mod=1方式,使用eth0與eth1)(1)編輯虛擬網路介面配置文件(bond0),並指定網卡IPvi /etc/sysconfig/network-scripts/ifcfg-bond0DEVICE=bond0ONBOOT=yesBOOTPROTO=staticIPADDR=192.168.0.254BROADCAST=192.168.0.255NETMASK=255.255.255.0NETWORK=192.168.0.0GATEWAY=192.168.0.1USERCTL=noTYPE=Ethernet注意:建議不要指定MAC地址vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=noneONBOOT=yesUSERCTL=noMASTER=bond0SLAVE=yes注意:建議不要指定MAC地址vi /etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth1BOOTPROTO=noneONBOOT=yesUSERCTL=noMASTER=bond0SLAVE=yes注意:建議不要指定MAC地址(2)編輯模塊載入配置文件(/etc/modprobe.conf),開機自動載入bonding模塊到內核
vi /etc/modprobe.conf
alias bond0 bonding options bond0 miimon=100 mode=1
alias net-pf-10 off #關閉ipv6支持說明:miimon是用來進行鏈路監測的。 比如:miimon=100,那麼系統每100ms監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路;mode的值表示工作模式,他共有0,1,2,3,4,5,6六種模式,常用為0,6,1三種,具體後面會介紹 mode=0,表示load balancing (round-robin)為負載均衡方式,兩塊網卡都工作,但是與網卡相連的交換必須做特殊配置( 這兩個埠應該採取聚合方式),因為做bonding的這兩塊網卡是使用同一個MAC地址mode=6,表示load balancing (round-robin)為負載均衡方式,兩塊網卡都工作,但是該模式下無需配置交換機,因為做bonding的這兩塊網卡是使用不同的MAC地址mode=1,表示fault-tolerance (active-backup)提供冗餘功能,工作方式是主備的工作方式,也就是說默認情況下只有一塊網卡工作,另一塊做備份 注意:bonding只能提供鏈路監測,即從主機到交換機的鏈路是否接通。如果只是交換機對外的鏈路down掉了,而交換機本身並沒有故障,那麼bonding會認為鏈路沒有問題而繼續使用(4)重啟並測試第一:由於bonding使用的模式為mod=1(網路冗餘),所以eth0、eth1與虛擬的bond0同一個MAC地址注意:對比上面這兩個圖,可知mode=1模式下,eth0與eth1這兩塊網卡,只有一塊網卡在工作(即:eth0),因為eth1網卡的RX與TX都沒有在發生變化第二:測試,用ping指令ping虛擬網卡設備bond0的IP地址(192.168.0.254),然後禁用eth0設備看一下能夠繼續ping的通說明:如上圖可得到,斷開eth0(上圖的右下角),還是可以ping的通的例2:實現網路負載均衡和網路冗餘(即:mod=0方式,使用eth0與eth1)注意:VM中只能做mode=1的實驗,其它的工作模式得用真機來實踐跟例1的步驟一樣,只需要修改模塊載入配置文件(/etc/modprobe.conf),如下:
alias bond0 bonding options bond0 miimon=100 mode=0
(1)測試如下##目前兩塊網卡都處於連接狀態root@Web:~# ifconfig | grep 'eth' | awk '{print $1}'eth0eth1##禁用了網卡eth0,用ping指令測試反之,也是一樣的!例3:實現網路負載均衡和網路冗餘(即:mod=6方式,使用eth0與eth1,其中eth0設置為primay)跟例1的步驟一樣,只需要修改模塊載入配置文件(/etc/modprobe.conf),如下:alias bond0 bonding options bond0 miimon=100 mode=6上圖可知:mode=6時,eth0與eth1所使用的MAC是不一樣的(1)測試如下##目前兩塊網卡都處於連接狀態root@Web:~# ifconfig | grep 'eth' | awk '{print $1}'eth0eth1##禁用了網卡eth0,用ping指令測試四、bonding運用的注意事項1、bonding的模式:0-6,即:7種模式第一種模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡掄循環策略)特點:傳輸數據包順序是依次傳輸(即:第1個包走eth0,下一個包就走eth1....一直循環下去,直到最後一個傳輸完畢), 此模式提供負載平衡和容錯能力;但是我們知道如果一個連接或者會話的數據包從不同的介面發出的話,中途再經過不同的鏈路,在客戶端很有可能會出現數據包無序到達的問題,而無序到達的數據包需要重新要求被發送,這樣網路的吞吐量就會下降第二種模式:mod=1,即: (active-backup) Active-backup policy(主-備份策略)特點:只有一個設備處於活動狀態,當 一個宕掉另一個馬上由備份轉換為主設備。mac地址是外部可見得,從外面看來,bond的MAC地址是唯一的,以避免switch(交換機)發生混亂。此模式只提供了容錯能力;由此可見此演算法的優點是可以提供高網路連接的可用性,但是它的資源利用率較低,只有一個介面處於工作狀態,在有 N 個網路介面的情況下,資源利用率為1/N第三種模式:mod=2,即:(balance-xor) XOR policy(平衡策略)特點:基於指定的傳輸HASH策略傳輸數據包。預設的策略是:(源MAC地址 XOR 目標MAC地址) % slave數量。其他的傳輸策略可以通過xmit_hash_policy選項指定,此模式提供負載平衡和容錯能力第四種模式:mod=3,即:broadcast(廣播策略)特點:在每個slave介面上傳輸每個數據包,此模式提供了容錯能力第五種模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 動態鏈接聚合)特點:創建一個聚合組,它們共享同樣的速率和雙工設定。根據802.3ad規范將多個slave工作在同一個激活的聚合體下。外出流量的slave選舉是基於傳輸hash策略,該策略可以通過xmit_hash_policy選項從預設的XOR策略改變到其他策略。需要注意的是,並不是所有的傳輸策略都是802.3ad適應的,尤其考慮到在802.3ad標准43.2.4章節提及的包亂序問題。不同的實現可能會有不同的適應性。必要條件:條件1:ethtool支持獲取每個slave的速率和雙工設定條件2:switch(交換機)支持IEEE 802.3ad Dynamic link aggregation條件3:大多數switch(交換機)需要經過特定配置才能支持802.3ad模式第六種模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(適配器傳輸負載均衡)特點:不需要任何特別的switch(交換機)支持的通道bonding。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。該模式的必要條件:ethtool支持獲取每個slave的速率第七種模式:mod=6,即:(balance-alb) Adaptive load balancing(適配器適應性負載均衡)特點:該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,並把源硬體地址改寫為bond中某個slave的唯一硬體地址,從而使得不同的對端使用不同的硬體地址進行通信。來自伺服器端的接收流量也會被均衡。當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中復制並保存下來。當ARP應答從對端到達時,bonding驅動把它的硬體地址提取出來,並發起一個ARP應答給bond中的某個slave。使用ARP協商進行負載均衡的一個問題是:每次廣播 ARP請求時都會使用bond的硬體地址,因此對端學習到這個硬體地址後,接收流量將會全部劉翔當前的slave。這個問題通過給所有的對端發送更新(ARP應答)來解決,應答中包含他們獨一無二的硬體地址,從而導致流量重新分布。當新的slave加入到bond中時,或者某個未激活的slave重新激活時,接收流量也要重新分布。接收的負載被順序地分布(round robin)在bond中最高速的slave上當某個鏈路被重新接上,或者一個新的slave加入到bond中,接收流量在所有當前激活的slave中全部重新分配,通過使用指定的MAC地址給每個 client發起ARP應答。下面介紹的updelay參數必須被設置為某個大於等於switch(交換機)轉發延時的值,從而保證發往對端的ARP應答不會被switch(交換機)阻截。必要條件:條件1:ethtool支持獲取每個slave的速率;條件2:底層驅動支持設置某個設備的硬體地址,從而使得總是有個slave(curr_active_slave)使用bond的硬體地址,同時保證每個bond 中的slave都有一個唯一的硬體地址。如果curr_active_slave出故障,它的硬體地址將會被新選出來的 curr_active_slave接管其實mod=6與mod=0的區別:mod=6,先把eth0流量占滿,再佔eth1,....ethX;而mod=0的話,會發現2個口的流量都很穩定,基本一樣的帶寬。而mod=6,會發現第一個口流量很高,第2個口只佔了小部分流量2、bonding驅動選項Bonding驅動的選項是通過在載入時指定參數來設定的。可以通過insmod或modprobe命令的命令行參數來指定,但通常在/etc/modprobe.conf配置文件中指定,或其他的配置文件中下面列出可用的bonding驅動參數。如果參數沒有指定,驅動會使用預設參數。剛開始配置bond的時候,建議在一個終端窗口中運行"tail -f /var/log/messages"來觀察bonding驅動的錯誤信息【譯註:/var/log/messages一般會列印內核中的調試信息】有些參數必須要正確的設定,比如miimon、arp_interval和arp_ip_target,否則在鏈接故障時會導致嚴重的網路性能退化。很少的設備不支持miimon,因此沒有任何理由不使用它們。有些選項不僅支持文本值的設定,出於兼容性的考慮,也支持數值的設定,比如,"mode=802.3ad"和"mode=4"效果是一樣的具體的參數列表:1)primay指定哪個slave成為主設備(primary device),取值為字元串,如eth0,eth1等。只要指定的設備可用,它將一直是激活的slave。只有在主設備(primary device)斷線時才會切換設備。這在希望某個slave設備優先使用的情形下很有用,比如,某個slave設備有更高的吞吐率注意: primary選項只對active-backup模式有效2)updelay指定當發現一個鏈路恢復時,在激活該鏈路之前的等待時間,以毫秒計算。該選項只對miimon鏈路偵聽有效。updelay應該是miimon值的整數倍,如果不是,它將會被向下取整到最近的整數。預設值為03)arp_interval指定ARP鏈路監控頻率,單位是毫秒(ms)。如果APR監控工作於以太兼容模式(模式0和模式2)下,需要把switch(交換機)配置為在所有鏈路上均勻的分發網路包。如果switch(交換機)被配置為以XOR方式分發網路包,所有來自ARP目標的應答將會被同一個鏈路上的其他設備收到,這將會導致其他設備的失敗。ARP監控不應該和miimon同時使用。設定為0將禁止ARP監控。預設值為04)arp_ip_target指定一組IP地址用於ARP監控的目標,它只在arp_interval > 0時有效。這些IP地址是ARP請求發送的目標,用於判定到目標地址的鏈路是否工作正常。該設定值為ddd.ddd.ddd.ddd格式。多個IP地址通過逗號分隔。至少指定一個IP地址。最多可以指定16個IP地址。預設值是沒有IP地址5)downdelay指定一個時間,用於在發現鏈路故障後,等待一段時間然後禁止一個slave,單位是毫秒(ms)。該選項只對miimon監控有效。downdelay值應該是miimon值的整數倍,否則它將會被取整到最接近的整數倍。預設值為06)lacp_rate指定在802.3ad模式下,我們希望的鏈接對端傳輸LACPDU包的速率。可能的選項:(1)slow 或者 0請求對端每30s傳輸LACPDU(2)fast 或者 1請求對端每1s傳輸LACPDU(3)預設值是slow7)max_bonds為bonding驅動指定創建bonding設備的數量。比如:如果max_bonds為3,而且bonding驅動還沒有載入,那麼bond0,bond1,bond2將會被創建。預設值為16)miimon指定MII鏈路監控頻率,單位是毫秒(ms)。這將決定驅動檢查每個slave鏈路狀態頻率0表示禁止MII鏈路監控。100可以作為一個很好的初始參考值。下面的use_carrier選項將會影響如果檢測鏈路狀態。更多的信息可以參考「高可靠性」章節。預設值為08)mode指定bonding的策略。預設是balance-rr (round robin,循環賽)。可選的mode包括:0,1,2,3,4,5,63、bonding鏈路監測方法官方文檔里說有兩種針對鏈路的監測方法(注意:這兩種監測不能同時使用)第一種:miimon(這種方法是最常見的,此方法使用系統的mii-tool命令進行監測)模塊載入設置(/etc/modprobe.conf):# Start of bonding configurealias bond0 bondingoptions bond0 miimon=100 mode=1注意:使用cat /proc/net/bonding/bond0,可查看Bonding Mode: load balancing (round-robin)狀態options bond0 miimon=100 mode=0注意:使用cat /proc/net/bonding/bond0,可查看Bonding Mode: load balancing ((active-backup))狀態 root@Web:~# mii-tooleth0: negotiated 100baseTx-HD, link oketh1: negotiated 100baseTx-HD, link ok缺點:這種方法,只能監測交換機與該網卡之間的鏈路;如果它們之外的鏈路的地方斷了,而交換機本身沒有問題,也就是說你的網卡和交換機之間還是UP狀態,它是不會認為網路中斷,除非你的網卡是DOWN狀態,它才會把鏈路轉到另一塊網卡上,就像是拔掉網線一樣,或者把交換機埠shutdown一樣第二種:arp(這種方法比較實用,你可以把它看作是arp的ping(二層ping),但是可能會給網關造成一定的壓力)模塊載入:alias bond0 bondingoptions bond0 arp_interval=100 arp_ip_target=192.168.1.1 mode=active-backup primary=eth0解析如下:arp_interval=100,表示arp的檢測時間,等同於miimon=100的作用arp_ip_target=192.168.1.1,表示arp檢測的目標IP,必須是同網段的,最好就是網關注意:如果使用arp來ping網關不通,那麼在/proc/net/bonding/bond0里會一會down,一會up的優點:使用arp這種方法,如果交換機的上出現問題,網路不通,它就會把鏈轉到另一塊網卡上,但是不管是哪種方法,在第一塊網卡出現問題,鏈路轉到第二塊後,如果第一塊恢復正常,鏈路自己不會恢復的
4. Linux中-ls的總用量指什麼(如圖)紅方框裡面分別的指什麼
應該是該目錄下所有文件及子目錄文件佔用的總空間大小 ,不是文件大小
5. linux怎麼查看cpu使用率取整
說實話 你這種格式 10/12 11:10:00 怎麼取值?
我取得數組 是 取 10 12 11 10 00 取整數? 還是取10/1211:10:00 取整個字元串?
你起碼應該給我定義一個變數類型吧
O
6. 嵌入式Linux中關於c面試題
2.某32位系統下, C++程序,請計算sizeof 的值(5分).char str[] = 「 http://www.ibegroup.com/」char *p = str ;int n = 10;請計算sizeof (str ) = ?(1)sizeof ( p ) = ?(2)sizeof ( n ) = ?(3)void Foo ( char str[100]){請計算sizeof( str ) = ?(4)}void *p = malloc( 100 );請計算sizeof ( p ) = ?(5)2>Void GetMemory(char **p, int num){*p = (char *)malloc(num);}void Test(void){char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello");printf(str);}請問運行Test 函數會有什麼樣的結果?3>int i=10, j=10, k=3; k*=i+j; k最後的值是4>以下是求一個數的平方的程序,請找出錯誤:#define SQUARE(a)((a)*(a))int a=5;int b;b=SQUARE(a++);4>C/C++編譯器中虛表是如何完成的?5>.對於一個頻繁使用的短小函數,在C語言中應用什麼實現,在C++中應用什麼實現?6>unsigned char *p1; unsigned long *p2; p1=(unsigned char *)0x801000; p2=(unsigned long *)0x810000; 請問p1+5= ; p2+5= ;
7. linux正常進程數是多少.
不同發行版是不同的,而且同一發行版的不同安裝(工作站、伺服器、自定義等)默認啟動的進程數也是不同的。
linux 系統中單個進程的最大線程數有其最大的限制 PTHREAD_THREADS_MAX
這個限制可以在 /usr/include/bits/local_lim.h 中查看
對 linuxthreads 這個值一般是 1024,對於 nptl 則沒有硬性的限制,僅僅受限於系統的資源。
這個系統的資源主要就是線程的 stack 所佔用的內存,用 ulimit -s 可以查看默認的線程棧大小,一般情況下,這個值是 8M。
可以寫一段簡單的代碼驗證最多可以創建多少個線程。
試驗顯示,在 linuxthreads 上最多可以創建 381 個線程,之後就會返回 EAGAIN
在 nptl 上最多可以創建 382 個線程,之後就會返回 ENOMEM
這個值和理論完全相符,因為 32 位 linux 下的進程用戶空間是 3G 的大小,也就是 3072M,用 3072M 除以 8M 得 384,但是實際上代碼段和數據段等還要佔用一些空間,這個值應該向下取整到 383,再減去主線程,得到 382。
那為什麼 linuxthreads 上還要少一個線程呢?這可太對了,因為 linuxthreads 還需要一個管理線程。
為了突破內存的限制,可以有兩種方法:
1) 用 ulimit -s 1024 減小默認的棧大小
2) 調用 pthread_create 的時候用 pthread_attr_getstacksize 設置一個較小的棧大小
要注意的是,即使這樣的也無法突破 1024 個線程的硬限制,除非重新編譯 C 庫<=此處值得討論,我在ubuntu 7.04+3G內存上用ulimit -s 1024,則可以得到3054個線程。