⑴ linux下ifconfig後不顯示ipv4的地址,怎麼回事兒啊求教達人~~
進配置文件看是否已經配置了IP地址
more /etc/sysconfig/network-scripts/ifcfg-eth0
⑵ C#獲取本地IP地址是ipv6的 怎麼轉換成ipv4
首先:ipv6是在Vista,或者Win7中獲取的,XP中沒有ipv6;然後:不能把ipv6變成ipv4,但是你可以直接獲取ipv4的值。下面是我寫的一個獲取ipv6和ipv4的類。你可以直接把它編譯成DLL文件,以後要使用ipv4,或者ipv6的時候,就可以直接調用這個動態鏈接庫。-------------------------------------------------------------------------------------------------------------------------------------
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets;using System.Windows.Forms;
namespace GetLocalIP{ public class GetIP { private IPAddress IPv4 , IPv6; public GetIP()//構造函數。 { getAllIP(); } private void getAllIP() { IPAddress [] ipList= Dns.GetHostAddresses(Dns.GetHostName()); foreach (IPAddress ip in ipList) { //獲得IPv4 if (ip.AddressFamily == AddressFamily.InterNetwork) IPv4 = ip; //獲得IPv6 if (ip.AddressFamily == AddressFamily.InterNetworkV6) IPv6 = ip; } } public IPAddress GetLocalIPv4()//通過這個public函數獲取ipv4 { try { if (IPv4 != null) return IPv4; else return null; } catch (Exception error) { MessageBox.Show(" GetLocalIpv4 Error: " + error.Message); return null; } } public IPAddress GetLocalIPv6()//通過這個public函數獲取ipv6 { try { if (IPv6 != null) return IPv6; else return null; } catch (Exception error) { MessageBox.Show(" GetLocalIpv6 Error: " + error.Message); return null; } } }}
---------------------------用法:首先你要添加這個動態鏈接庫.直到可以使用該類。。
GetIP getLocalIP = new GetIP();IPAddress ipv4 = getLocalIP.GetLocalIPv4();IPAddress ipv6 = getLocalIP.GetLocalIPv6();----------------------------------------------------------------------當然如果你僅僅需要獲得ipv4的值的話。只需要這樣就可以了。首先獲取所有的Ip地址,然後從中選擇ipv4.
IPAddress IPv4; IPAddress [] ipList= Dns.GetHostAddresses(Dns.GetHostName()); foreach (IPAddress ip in ipList) { //獲得IPv4 if (ip.AddressFamily == AddressFamily.InterNetwork) IPv4 = ip; }}
⑶ 編譯原理 什麼是靜態鏈
1、路由器的工作原理
路由工作簡單原理圖
在這里插入圖片描述
1)主機1.1要發生數據包給主機4.1.因為IP地址不在同一網段,所以主機會將數據包發送給本網段的網關路由器。
2)路由器A 接收到數據包,先查看數據包IP首部中的目標IP地址。再查找自己的路由表。數據包的目標IP地址是4.1.屬於4.0網段,路由器A 在路由表中查到4.0網段轉發的介面是S0介面,於是路由器A將數據從S0介面轉發出去。
3)網路中的每個路由器都是按照這樣的步驟轉發數據的,直到到達路由器B,再用同樣的方法從E0介面轉發出去,最後主機4.1接收到這個數據包。
2、路由表
(1)概念
路由器中維護的路由條目的集合。
路由器根據路由表做的路徑選擇。
(2)路由表的形成
1)直連網段
配置IP地址,埠UP 狀態,形成直連路由。
2)非直連網段
需要靜態路由或動態路由,將網段添加到路由表中。
3、靜態路由
由管理員手工配置的,是單向的。缺乏靈活性。
管理員可以通過靜態路由來控制數據包在網路中的流動。
4、默認路由
一種特殊的靜態路由,當路由器在路由表中找不到目標網路的路由條目時,路由器把請求轉發到默認路由介面。
當默認路由存在末梢網路時,默認路由會大大簡化路由器的配置。
5、路由器轉發數據包的分裝過程
HostA向HostB發送數據
在這里插入圖片描述
1)HostA在網路層將上層的報文封裝成IP數據包,其首部包含源地址和目的地址。源地址即本機IP地址192.168.1.2,目的地在為HostB的IP地址192.168.2.2,HostA使用本機配置的24位掩碼於目的地址進行「與」運算,得出目的地在與本機地址不在同一網段,因此發往HostB的數據包需要經過網關路由器A轉發。
2)HostA通過ARP請求獲得默認網關路由器A 的E0介面MAC 地址00-11-12-21-22-22.在數據鏈路層HostA將IP數據包封裝成乙太網數據幀,在乙太網首部的源MAC地址為00-11-12-21-11-11,目的MAC地址為網關E0介面的MAC地址00-11-12-21-22-22
3)路由器A從E0介面接收到數據幀,把數據鏈路層的封裝去掉。路由器A認為這個IP數據包是要通過自己進行路由轉發,所以路由器A會自己查找自己的路由表,尋找與目標IP地址192.168.2.2相匹配的路由表項,然後根據路由表的下一跳地址將數據包轉發到E1介面。
4)在E1介面路由器A 重新封裝乙太網幀,此時源MAC地址為路由器A的E1介面MAC地址00-11-12-21-33-33,目的MAC地址為與之相連的路由器B的E1介面MAC地址00-11-12-21-44-44
5)路由器B從E1介面接收到數據幀,同樣會吧數據鏈路層的封裝去掉。對目的IP地址進行檢查,並與路由表進行匹配,然後根據路由表的下一跳信息將數據包轉發到E0介面。路由器B發現目的網段與自己的E0介面相連,通過ARP廣播,路由器B獲得HostB以太口的MAC地址00-11-12-21-66-66.路由器B在將IP數據包封裝成乙太網幀,源MAC地址為路由器B的E0介面的MAC地址00-11-12-21-55-55,目的MAC地址為HostB的MAC地址00-11-12-21-66-66.封裝完畢,將乙太網幀從E0介面發往HostB.
⑷ 編譯原理,把數組元素賦值語句翻譯為三地址代碼的問題,題目和答案如圖,第五題,不過看不太懂,84是從
「84」是C,定義在課本180頁式(7.7)。lown 表示數組第n維的下標最小值,比如MATLAB中數組A,A(1)是其數組的第一個元素,則其low1 = 1. C語言中數組A,A[0]是其第一個元素,則low1 = 0.
⑸ 公網IP(IPV4)的分配范圍是(高手賜教)
目前我們使用的第二代互聯網IPV4技術,核心技術屬於美國。它的最大問題是網路地址資源有限,從理論上講,IPV4技術可使用的IP地址有43億個,其中北美佔有3/4,約30億個,而人口最多的亞洲只有不到4億個,中國只有3千多萬個,只相當於美國麻省理工學院的數量。地址不足,嚴重地制約了我國及其他國家互聯網的應用和發展。
與IPV4相比,IPV6具有以下幾個優勢:首先就是網路地址近乎無限,根據這項技術,其網路地址可以達到2的128次方個,如果說IPV4的地址總數為一小桶沙子的話,那麼IPV6的地址總數就像是地球那麼大的一桶沙子。其次就是由於每個人都可以擁有一個以上的IP地址,網路的安全性能將大大提高。第三就是數據傳輸速度將大大提高。IPv6的主要優勢還體現在以下幾方面:提高網路的整體吞吐量、改善服務質量(QoS)、支持即插即用和移動性、更好實現多播功能。 根據這項技術,如果說IPV4實現的只是人機對話,而IPV6則擴展到任意事物之間的對話,它不僅可以為人類服務,還將服務於眾多硬體設備,如家用電器、感測器、遠程照相機、汽車等,它將是無時不在,無處不在的深入社會每個角落的真正的寬頻網。而且它所帶來的經濟效益將非常巨大.當然,IPv6並非十全十美、一勞永逸,不可能解決所有問題。IPv6隻能在發展中不斷完善,也不可能在一夜之間發生,過渡需要時間和成本,但從長遠看,IPv6有利於互聯網的持續和長久發展。 目前,國際互聯網組織已經決定成立兩個專門工作組,制定相應的國際標准。
IPv6 FAQ
1. 什麼是IP? 什麼是IPv4? 什麼是IPv6?
目前的全球網際網路所採用的協議族是TCP/IP協議族。IP是TCP/IP協議族中網路層的協議,是TCP/IP協議族的核心協議。目前IP協議的版本號是4(簡稱為IPv4),它的下一個版本就是IPv6。IPv6正處在不斷發展和完善的過程中,它在不久的將來將取代目前被廣泛使用的IPv4。
2. IPv6與IPv4相比有什麼特點和優點?
1)更大的地址空間。IPv4中規定IP地址長度為32,即有2^32-1個地址;而IPv6中IP地址的長度為128,即有2^128-1個地址。
2)更小的路由表。IPv6的地址分配一開始就遵循聚類(Aggregation)的原則,這使得路由器能在路由表中用一條記錄(Entry)表示一片子網,大大減小了路由器中路由表的長度,提高了路由器轉發數據包的速度。
3)增強的組播(Multicast)支持以及對流的支持(Flow-control)。這使得網路上的多媒體應用有了長足發展的機會,為服務質量(QoS)控制提供了良好的網路平台.
4)加入了對自動配置(Auto-configuration)的支持.這是對DHCP協議的改進和擴展,使得網路(尤其是區域網)的管理更加方便和快捷.
5)更高的安全性.在使用IPv6網路中用戶可以對網路層的數據進行加密並對IP報文進行校驗,這極大的增強了網路安全.
3. 我們需要2^128-1個IP地址嗎?
需要.隨著電子技術及網路技術的發展,計算機網路將進入人們的日常生活,可能身邊的每一樣東西都需要連入全球網際網路.並且,准確的說,使用IPv6的網路並沒有2^128-1個能充分利用的地址.首先,要實現IP地址的自動配置,區域網所使用的子網的前綴必須等於64,但是很少有一個區域網能容納2^64個網路終端;其次,由於IPv6的地址分配必須遵循聚類的原則,地址的浪費在所難免.
4. 我想了解一下IPv6,該怎麼做呢?
看RFC! 這是最省錢也是最保險的辦法,就是枯燥一點.目前國內介紹IPv6的書至少有一本: IPv6--the new Internet protocol(second edition)/新網際網路協議IPv6(第二版),清華大學出版社,1999 介紹IPv6網路編程(Unix平台)的書也至少有一本: Unix Network Programming Volume I (Second Edition)/Unix網路編程卷一(第二版),清華大學出版社,1998
5. 我想試一試IPv6,該做些什麼呢?
你需要三樣東西:支持IPv6的操作系統;支持IPv6的軟體;與網際網路的連接.
1)目前支持IPv6的操作系統有:Linux(內核版本至少是2.2.1,最好是2.2.12以上),FreeBSD(4.x系列已經支持IPv6,更早的版本需要給內核打補丁),WindowsNT/2000(需要去微軟的網站下一個補丁程序),NetBSD,OpenBSD,Solaris(這些就不熟了),等等等等.目前肯定不支持IPv6的操作系統是(我知道的)Windows系列中Windows98及其以前的版本.
2)支持IPv6的操作系統一般都會自帶一些支持IPv6的網路程序(Linux的情況比較特殊,有的軟體可能本身支持IPv6但在編譯的時候沒有打開相應的選項,這是因為不同的發布商對IPv6重要性及可用性的看法各不相同).但是,這些操作系統自帶的程序往往並不是最好的,你可能需要到網上去找一些好用的支持IPv6的軟體.
3)如果你想真正嘗試IPv6,一定要連網,起碼要有一個區域網環境.
我的空間,有關於IPV6最齊全的圖文表影音資料!!
IPv6 讓地球上每粒沙子都有一個地址
http://hi..com/dalu/blog/item/6373c93decad12c79f3d62b8.html
IPv6網路時代即將來臨:全球首台IPv6交換器曝光
http://hi..com/dalu/blog/item/66aaf7039aec89ec08fa93b9.html
IPv6時代RIP路由協議研究與實現
http://hi..com/dalu/blog/item/bd429b502da1fc62853524b9.html
關於IPV6的音視頻資料的下載
http://hi..com/dalu/blog/item/f25e6b602a57ae44ebf8f8ba.html
⑹ C語言編譯原理是什麼
編譯共分為四個階段:預處理階段、編譯階段、匯編階段、鏈接階段。
1、預處理階段:
主要工作是將頭文件插入到所寫的代碼中,生成擴展名為「.i」的文件替換原來的擴展名為「.c」的文件,但是原來的文件仍然保留,只是執行過程中的實際文件發生了改變。(這里所說的替換並不是指原來的文件被刪除)
2、匯編階段:
插入匯編語言程序,將代碼翻譯成匯編語言。編譯器首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤後,編譯器把代碼翻譯成匯編語言,同時將擴展名為「.i」的文件翻譯成擴展名為「.s」的文件。
3、編譯階段:
將匯編語言翻譯成機器語言指令,並將指令打包封存成可重定位目標程序的格式,將擴展名為「.s」的文件翻譯成擴展名為「.o」的二進制文件。
4、鏈接階段:
在示例代碼中,改代碼文件調用了標准庫中printf函數。而printf函數的實際存儲位置是一個單獨編譯的目標文件(編譯的結果也是擴展名為「.o」的文件),所以此時主函數調用的時候,需要將該文件(即printf函數所在的編譯文件)與hello
world文件整合到一起,此時鏈接器就可以大顯神通了,將兩個文件合並後生成一個可執行目標文件。
⑺ 編譯器有哪幾部分構成.編譯原理
1. 詞法分析
詞法分析器根據詞法規則識別出源程序
中的各個記號(token),每個記號代表一類單詞(lexeme)。源程序中常見的記號可以歸為幾大類:關鍵字、標識符、字面量和特殊符號。詞法分析器
的輸入是源程序,輸出是識別的記號流。詞法分析器的任務是把源文件的字元流轉換成記號流。本質上它查看連續的字元然後把它們識別為「單詞」。
2. 語法分析
語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。
3. 語義分析
語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果類型檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。
4. 中間代碼生成
中間代碼生成器根據語義分析器的輸出生成中間代碼。中間代碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間代碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於優化。
⑻ 編譯原理的數據結構
編譯原理一直是計算機學習的必修課.
當然,由編譯器的階段使用的演算法與支持這些階段的數據結構之間的交互是非常強大的。編譯器的編寫者盡可能有效實施這些方法且不引起復雜性。理想的情況是:與程序大小成線性比例的時間內編譯器,換言之就是,在0 ( n )時間內,n是程序大小的度量(通常是字元數)。本節將講述一些主要的數據結構,它們是其操作部分階段所需要的,並用來在階段中交流信息。 臨時文件(temporary file):計算機過去一直未能在編譯器時將整個程序保留在存儲器中。這一問題已經通過使用臨時文件來保存翻譯時中間步驟的結果或通過「匆忙地」編譯(也就是只保留源程序早期部分的足夠信息用以處理翻譯)解決了。存儲器的限制現在也只是一個小問題了,現在可以將整個編譯單元放在存儲器之中,特別是在可以分別編譯的語言中時。但是偶爾還是會發現需要在某些運行步驟中生成中間文件。其中典型的是代碼生成時需要反填(backpatch)地址。例如,當翻譯如下的條件語句時 if x = 0 then ... else ... 在知道else部分代碼的位置之前必須由文本跳到else部分:
CMP X,0 JNE NEXT ;;
location of NEXT not yet known < code for then-part > NEXT : < code for else-part >
通常,必須為NEXT的值留出一個空格,一旦知道該值後就會將該空格填上,利用臨時文件可以很容易地做到這一點。
如果想利用上面的編譯原理開發一套屬於自己的編程語言,或者想在一個產品中嵌入編程語言,可以參考zengl開源網開發的zengl編程語言,該編程語言為國人使用C語言開發,裡麵包含兩個部分,一個是編譯器,一個是解釋執行中間代碼的虛擬機。編譯器包含了詞法掃描,語法分析,中間代碼輸出等,虛擬機則類似JAVA一樣解釋執行中間代碼。作者將所有的版本都公布出來,好讓讀者可以由淺入深的做研究,並且為了證明該編程語言的實用性,還結合SDL游戲開發庫開發了一款圖形界面和命令行界面的21點撲克小游戲 。
zengl編程語言目前適用平台為windows和linux (最開始在Linux下使用gcc開發,後來移植到windows平台)
⑼ 編譯原理問題,高手進。
回答下列問題:(30分)
(6分)對於下面程序段
program test (input, output)
var i, j: integer;
procere CAL(x, y: integer);
begin
y:=y*y; x:=x-y; y:=y-x
end;
begin
i:=2; j:=3; CAL(i, j)
writeln(j)
end.
若參數傳遞的方法分別為(1)傳值、(2)傳地址,(3)傳名,請寫出程序執行的輸出結果。
答: (1) 3 (2) 16 (3) 16 (每個值2分)
(6分)計算文法G(M)的每個非終結符的FIRST和FOLLOW集合,並判斷該文法是否是LL(1)的,請說明理由。
G(M):
M → TB
T → Ba |
B → Db | eT |
D → d |
解答:
計算文法的FIRST和FOLLOW集合:(4分)
FIRST(M) = { a,b,e,d, } FIRST(T) = { a,b,e,d, }
FIRST(B) = {b,e,d, } FIRST(D) = {d,}
FOLLOW (M) = {#} FOLLOW (T) = { a,b,e,d,#}
FOLLOW (B) = {a,# } FOLLOW (D) = { b}
檢查文法的所有產生式,我們可以得到:
1. 該文法不含左遞歸,
2. 該文法中每一個非終結符M,T,B,D的各個產生式的候選首符集兩兩不相交。
3. 該文法的非終結符T、B和D,它們都有候選式,而且
FIRST(T)∩FOLLOW(T)={ a,b,e,d }≠
所以該文法不是LL(1)文法。(2分)
(4分)考慮下面的屬性文法
產 生 式 語 義 規 則
S→ABC
A→a
B→b
C→c B.u := S.u
A.u := B.v + C.v
S.v := A.v
A.v :=3*A.u
B.v := B.u
C.v := 1
畫出字元串abc的語法樹;
對於該語法樹,假設S.u的初始值為5,屬性計算完成後,S.v的值為多少。
答:(1) (2分)
(2) S.v的值為18 (2分)
(4分)運行時的DISPLAY表的內容是什麼?它的作用是什麼?
答:DISPLAY表是嵌套層次顯示表。每當進入一個過程後,在建立它的活動記錄區的同時建立一張嵌套層次顯示表diaplay.假定現在進入的過程層次為i,則它的diaplay表含有i+1個單元,自頂向下每個單元依次存放著現行層、直接外層、…、直至最外層(主程序,0層)等每層過程的最新活動記錄的起始地址。通過DISPLAY表可以訪問其外層過程的變數。
(5分)對下列四元式序列生成目標代碼:
A:=B*C
D:=E+A
G:=B+C
H:=G*D
其中,H在基本塊出口之後是活躍變數, R0和R1是可用寄存器。
答: 目標代碼序列
LD R0 B
MUL R0 C
LD R1 E
ADD R1 R0
LD R0 B
ADD R0 C
MUL R0 R1
ST R0 H
(5分)寫出表達式a+b*(c-d)對應的逆波蘭式、三元式序列和抽象語法樹。
答:
逆波蘭式:(abcd-*+) (1分)
三元式序列: (2分)
OP ARG1 ARG2
(1) - c d
(2) * b (1)
(3) + a (2)
抽象語法樹:(2分)
(8分)構造一個DFA,它接受={a,b}上所有包含ab的字元串。
答:
(2分)構造相應的正規式:(a|b)*ab(a|b)*
(3分)
a a
a b
b b
(3分)確定化:
I
{0,1,2} {1,2,3} {1,2}
{1,2,3} {1,2,3} {1,2,4,5,6}
{1,2} {1,2,3} {1,2}
{1,2,4,5,6} {1,2,3,5,6} {1,2,5,6}
{1,2,3,5,6} {1,2,3,5,6} {1,2,4,5,6}
{1,2,5,6} {1,2,3,5,6} {1,2,5,6}
b b
b a
a a a a
a b b
b
最小化:
{0,1,2} {3,4,5}
{0, 2},1, {3,4,5}
(6分)寫一個文法使其語言為L(G)={anbncm| m,n≥1,n為奇數,m為偶數}。
答:
文法G(S):
(8分)對於文法G(S):
1. 寫出句型b(Ma)b的最右推導並畫出語法樹。
2. 寫出上述句型的短語,直接短語和句柄。
答:
1. (4分)
2. (4分)
短語: Ma), (Ma), b(Ma)b
直接短語: Ma)
句柄: Ma)
(12分)對文法G(S):
S → a | ^ | (T)
T → T,S | S
(1) 構造各非終結符的FIRSTVT和LASTVT集合;
(2) 構造算符優先表;
(3) 是算符優先文法嗎?
(4) 構造優先函數。
答:
(1) (4分)
(2) (4分)
a ^ ( ) ,
a > >
^ > >
( < < < = <
) > >
, < < < > >
(3) 是算符優先文法,因為任何兩個終結符之間至多隻有一種優先關系。 (1分)
(4) 優先函數(3分)
a ^ ( ) ,
F 4 4 2 4 4
G 5 5 5 2 3
(8分)設某語言的do-while語句的語法形式為
S do S(1) While E
其語義解釋為:
針對自下而上的語法分析器,按如下要求構造該語句的翻譯模式,將該語句翻譯成四元式:
(1) 寫出適合語法制導翻譯的產生式;
(2) 寫出每個產生式對應的語義動作。
答:(1). 適合語法制導翻譯的文法(4分)
G(S):
R do
UR S(1) While
SU E
(2). (4分)
R do
{ R.QUAD:=NXQ }
UR S(1) While
{ U.QUAD:=R.QUAD;
BACKPATCH(S.CHAIN, NXQ) }
SU E
{ BACKPATCH(E.TC, U.QUAD);
S.CHAIN:=E.FC }
答案二:
(1) S do M1 S(1) While M2 E
M ε (4分)
(2) M ε { M.QUAD := NXQ } (4分)
S do M1 S(1) While M2 E
{
BACKPATCH(S(1).CHAIN, M2.QUAD);
BACKPATCH(E.TC, M1.QUAD);
S.CHAIN:=E. FC
}
(10分)將語句
while C>0 do if A B=0 then C:=C+D else C:=C*D
翻譯成四元式。
答:
100 (j>, C, 0, 102)
101 (j, -, -, 112)
102 (jnz, A, -, 106)
103 (j, -, -, 104)
104 (j=, B, 0, 106)
105 (j, -, -, 109)
106 (+, C, D, T1)
107 (:=, T1, -, C)
108 (j, -, -, 100)
109 (*, C, D, T2)
110 (:=, T2, -, C)
111 (j, -, -, 100)
112
(10分)設有基本塊如下:
T1:=3
T2:=A*B
T3:=9+T1
M:=A*B
T4:=C-D
L:=T3*T4
T2:=C+D
N:=T2
畫出DAG圖;
設L,M,N 是出基本塊後的活躍變數,請給出優化後的四元式序列。
答:
1. (6分)
L
*
T2,M T4 T2,N
* - +
T1 T3
3 A B 12 C D
2. (4分)
M:=A*B
S1:=C-D
L:=12*S1
N:=C+D
(8分)文法G(S)及其LR分析表如下,請給出串baba#的分析過程。
(1) S → DbB (2) D → d (3) D → ε
(4) B → a (5) B → Bba (6) B → ε
LR分析表
ACTION GOTO
b D a # S B D
0 r3 s3 1 2
1 acc
2 s4
3 r2
4 r6 S5 r6 6
5 r4 r4
6 s7 r1
7 S8
8 r5 r5
解答:
步驟 狀態 符號 輸入串
0 0 # baba#
1 02 #D baba#
2 024 #Db aba#
3 0245 #Dba ba#
4 0246 #DbB ba#
5 02467 #DbBb a#
6 024678 #DbBba #
7 0246 #DbB #
8 01 #S # acc
哈哈,估計認識!!