當前位置:首頁 » 操作系統 » linux大端

linux大端

發布時間: 2022-05-26 23:10:25

linux可以再powerpc上運行嗎

解決方案--------------------
首先,不要懷疑操作系統問題。所以只可能是你代碼中有某種隱藏BUG。
其次,x86和pocketPC的一個明顯的差異在於前者是小端(little-endian),後者是大端(big-endian).所以你仔細想想有沒有出現和位元組序有關的操作(如網路方面是否者用了htonl htons ntohs ntohl.還有中間是否有二進制協議解析).排查下這些地方。
最後,如果還是沒找出問題的話,那你就用排除法吧,將整個工程一點點去掉一個模塊,看是否有問題。這樣不斷

㈡ Linux開發需要什麼呢需要具備什麼基礎呢

一、linux和os:

1、命令:netstat tcpmp ipcs ipcrm 這四個命令的熟練掌握程度基本上能體現實際開發和調試程序的經驗

2、cpu 內存 硬碟 等等與系統性能調試相關的命令必須熟練掌握,設置修改許可權 tcp網路狀態查看 各進程狀態 抓包相關等相關命令 必須熟練掌握

3、awk sed需掌握

4、共享內存的使用實現原理、然後共享內存段被映射進進程空間之後,存在於進程空間的什麼位置?共享內存段最大限制是多少?

5、c++進程內存空間分布(注意各部分的內存地址誰高誰低,注意棧從高道低分配,堆從低到高分配)

6、ELF是什麼?其大小與程序中全局變數的是否初始化有什麼關系(注意.bss段)

7、使用過哪些進程間通訊機制,並詳細說明

8、makefile編寫,雖然比較基礎,但是會被問到

9、gdb調試相關的經驗,會被問到

10、如何定位內存泄露?

11、動態鏈接和靜態鏈接的區別

12、32位系統一個進程最多多少堆內存

13、多線程和多進程的區別(重點 必須從cpu調度,上下文切換,數據共享,多核cup利用率,資源佔用,等等各方面回答,然後有一個問題必須會被問到:哪些東西是一個線程私有的?答案中必須包含寄存器,否則悲催)

14、寫一個c程序辨別系統是64位 or 32位

15、寫一個c程序辨別系統是大端or小端位元組序

16、信號:列出常見的信號,信號怎麼處理?

17、i++是否原子操作?並解釋為什麼???????

18、說出你所知道的各類linux系統的各類同步機制(重點),什麼是死鎖?如何避免死鎖(每個技術面試官必問)

19、列舉說明linux系統的各類非同步機制

20、exit() _exit()的區別?

21、如何實現守護進程?

22、linux的內存管理機制是什麼?

23、linux的任務調度機制是什麼?

24、標准庫函數和系統調用的區別?

25、補充一個問題:系統如何將一個信號通知到進程?

二、c語言

1、宏定義和展開(必須精通)

2、位操作(必須精通)

3、指針操作和計算(必須精通)

4、內存分配(必須精通)

5、各類庫函數必須非常熟練的實現

6、哪些庫函數屬於高危函數,為什麼?(strcpy等等)

三、c++:

1、一個String類的完整實現必須很快速寫出來(注意:賦值構造,operator=是關鍵)

2、虛函數的作用和實現原理(必問必考,實現原理必須很熟)

3、sizeof一個類求大小(注意成員變數,函數,虛函數,繼承等等對大小的影響)

4、指針和引用的區別(一般都會問到)

5、多重類構造和析構的順序

6、stl各容器的實現原理(必考)

7、extern c 是幹啥的,(必須將編譯器的函數名修飾的機制解答的很透徹)

8、volatile是幹啥用的,(必須將cpu的寄存器緩存機制回答的很透徹)

9、static const等等的用法,(能說出越多越好)

四、數據結構或者演算法

1、《離散數學》范圍內的一切問題皆由可能被深入問到(最重要,最體現功底,最能加分,特別是各類樹結構的實現和應用)

2、各類排序:大根堆的實現,快排(如何避免最糟糕的狀態?),bitmap的運用等等

3、hash, 任何一個技術面試官必問(例如為什麼一般hashtable的桶數會取一個素數?如何有效避免hash結果值的碰撞)

五、網路編程

1、tcp與udp的區別(必問)

2、udp調用connect有什麼作用?

3、tcp連接中時序圖,狀態圖,必須非常非常熟練

4、socket服務端的實現,select和epoll的區別(必問)

5、epoll哪些觸發模式,有啥區別?(必須非常詳盡的解釋水平觸發和邊緣觸發的區別,以及邊緣觸發在編程中要做哪些更多的確認)

6、大規模連接上來,並發模型怎麼設計

7、tcp結束連接怎麼握手,time_wait狀態是什麼,為什麼會有time_wait狀態?哪一方會有time_wait狀態,如何避免time_wait狀態佔用資源(必須回答的詳細)

8、tcp頭多少位元組?哪些欄位?(必問)

9、什麼是滑動窗口(必問)

10、connect會阻塞,怎麼解決?(必考必問,提示:設置非阻塞,返回之後用select檢測狀態)

11、如果select返回可讀,結果只讀到0位元組,什麼情況?

12、keepalive 是什麼東東?如何使用?

13、列舉你所知道的tcp選項,並說明其作用。

14、socket什麼情況下可讀?

六、db:

1、mysql,會考sql語言,伺服器資料庫大規模數據怎麼設計,db各種性能指標

㈢ linux操作系統是大端還是小端

您好,大小端不是由系統決定的,是由硬體,所以得看你硬體是手冊,一般前兩頁就有提到

㈣ linux和windows 大小端一致嗎

位元組序不是由操作系統決定的,而是由cpu架構決定的,比如 x86 的是 little endian,而 PPC (PowerPC) 是big endian。 所以跑在 x86 上的 linux/windows 都是小端,而跑在 PPC 上的linux則是大端。 (PS: 實際上 PowerPC 是即支持大端也支持小端,但是由於歷史原因默認用大端)

㈤ linux tcp/ip 網路通信編程

/*************************************
文件名:server.c
linux下socket網路編程簡例-服務端程序
伺服器埠設為0x8888(埠和地址可根據實際情況更改,或者使用參數傳入)
伺服器地址設為192.168.1.104
作者:kikilizhm#163.com(將#換為@)
*/
#include<stdlib.h>
#include<sys/types.h>
#include<stdio.h>
#include<sys/socket.h>
#include<linux/in.h>
#include<string.h>
intmain()
{
intsfp,nfp;/*定義兩個描述符*/
structsockaddr_ins_add,c_add;
intsin_size;
unsignedshortportnum=0x8888;/*服務端使用埠*/
printf("Hello,welcometomyserver! ");
sfp=socket(AF_INET,SOCK_STREAM,0);
if(-1==sfp)
{
printf("socketfail! ");
return-1;
}
printf("socketok! ");
/*填充伺服器埠地址信息,以便下面使用此地址和埠監聽*/
bzero(&s_add,sizeof(structsockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr=htonl(INADDR_ANY);/*這里地址使用全0,即所有*/
s_add.sin_port=htons(portnum);
/*使用bind進行綁定埠*/
if(-1==bind(sfp,(structsockaddr*)(&s_add),sizeof(structsockaddr)))
{
printf("bindfail! ");
return-1;
}
printf("bindok! ");
/*開始監聽相應的埠*/
if(-1==listen(sfp,5))
{
printf("listenfail! ");
return-1;
}
printf("listenok ");
while(1)
{
sin_size=sizeof(structsockaddr_in);
/*accept服務端使用函數,調用時即進入阻塞狀態,等待用戶進行連接,在沒有客戶端進行連接時,程序停止在此處,
不會看到後面的列印,當有客戶端進行連接時,程序馬上執行一次,然後再次循環到此處繼續等待。
此處accept的第二個參數用於獲取客戶端的埠和地址信息。
*/
nfp=accept(sfp,(structsockaddr*)(&c_add),&sin_size);
if(-1==nfp)
{
printf("acceptfail! ");
return-1;
}
printf("acceptok! Serverstartgetconnectfrom%#x:%#x ",ntohl(c_add.sin_addr.s_addr),ntohs(c_add.sin_port));
/*這里使用write向客戶端發送信息,也可以嘗試使用其他函數實現*/
if(-1==write(nfp,"hello,welcometomyserver ",32))
{
printf("writefail! ");
return-1;
}
printf("writeok! ");
close(nfp);
}
close(sfp);
return0;
}
/*************************************
文件名:client.c
linux下socket網路編程簡例-客戶端程序
伺服器埠設為0x8888(埠和地址可根據實際情況更改,或者使用參數傳入)
伺服器地址設為192.168.1.104
作者:kikilizhm#163.com(將#換為@)
*/
#include<stdlib.h>
#include<sys/types.h>
#include<stdio.h>
#include<sys/socket.h>
#include<linux/in.h>
#include<string.h>
intmain()
{
intcfd;/*文件描述符*/
intrecbytes;
intsin_size;
charbuffer[1024]={0};/*接受緩沖區*/
structsockaddr_ins_add,c_add;/*存儲服務端和本端的ip、埠等信息結構體*/
unsignedshortportnum=0x8888;/*服務端使用的通信埠,可以更改,需和服務端相同*/
printf("Hello,welcometoclient! ");
/*建立socket使用網際網路,TCP流傳輸*/
cfd=socket(AF_INET,SOCK_STREAM,0);
if(-1==cfd)
{
printf("socketfail! ");
return-1;
}
printf("socketok! ");
/*構造伺服器端的ip和埠信息,具體結構體可以查資料*/
bzero(&s_add,sizeof(structsockaddr_in));
s_add.sin_family=AF_INET;
s_add.sin_addr.s_addr=inet_addr("192.168.1.104");/*ip轉換為4位元組整形,使用時需要根據服務端ip進行更改*/
s_add.sin_port=htons(portnum);/*這里htons是將short型數據位元組序由主機型轉換為網路型,其實就是
將2位元組數據的前後兩個位元組倒換,和對應的ntohs效果、實質相同,只不過名字不同。htonl和ntohl是
操作的4位元組整形。將0x12345678變為0x78563412,名字不同,內容兩兩相同,一般情況下網路為大端,
PPC的cpu為大端,x86的cpu為小端,arm的可以配置大小端,需要保證接收時位元組序正確。
*/
printf("s_addr=%#x,port:%#x ",s_add.sin_addr.s_addr,s_add.sin_port);/*這里列印出的是小端
和我們平時看到的是相反的。*/
/*客戶端連接伺服器,參數依次為socket文件描述符,地址信息,地址結構大小*/
if(-1==connect(cfd,(structsockaddr*)(&s_add),sizeof(structsockaddr)))
{
printf("connectfail! ");
return-1;
}
printf("connectok! ");
/*連接成功,從服務端接收字元*/
if(-1==(recbytes=read(cfd,buffer,1024)))
{
printf("readdatafail! ");
return-1;
}
printf("readok REC: ");
buffer[recbytes]='';
printf("%s ",buffer);
getchar();/*此句為使程序暫停在此處,可以使用netstat查看當前的連接*/
close(cfd);/*關閉連接,本次通信完成*/
return0;
}

㈥ ubuntu 是大端還是小端存儲

不同機器內部對變數的位元組存儲順序不同,有的採用大端模式(big-endian),有的採用小端模式(little-endian)。
大端模式是指高位元組數據存放在低地址處,低位元組數據放在高地址處。
小端模式是指低位元組數據存放在低地址處,高位元組數據放在高地址處。

在網路上傳輸數據時,由於數據傳輸的兩端可能對應不同的硬體平台,採用的存儲位元組順序也可能不一致,因此 TCP/IP 協議規定了在網路上必須採用網路位元組順序(也就是大端模式) 。
通過對大小端的存儲原理分析可發現,對於 char 型數據,由於其只佔一個位元組,所以不存在這個問題,這也是一般情況下把數據緩沖區定義成 char 類型 的原因之一。對於 IP 地址、埠號等非 char 型數據,必須在數據發送到網路上之前將其轉換成大端模式,在接收到數據之後再將其轉換成符合接收端主機的存儲模式。

Linux 系統為大小端模式的轉換提供了 4 個函數,輸入 man byteorder 命令可得函數原型:

<EM><STRONG><SPAN>#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);</SPAN>

</STRONG>

</EM>
htonl 表示 host to network long ,用於將主機 unsigned int 型數據轉換成網路位元組順序;
htons 表示 host to network short ,用於將主機 unsigned short 型數據轉換成網路位元組順序;
ntohl、ntohs 的功能分別與 htonl、htons 相反。

通常使用的有兩種數據類型:短型(兩個位元組)和長型(四個位元組)。
下面介紹的這些轉換函數對於這兩類的無符號整型變數都可以正確的轉換。
如果你想將一個短型數據從主機位元組順序轉換到網路位元組順序的話,有這樣一個函數htnos:
它是以"h」開頭的,代表「主機」;
緊跟著它的是"to",代表「轉換到」;
然後是"n",代表「網路」;
最後是"s",代表「短型數據」。

你可以使用"n", "h", "to", "s", "l"的任意組合。當然,你要在可能的情況下進行組合。比如,系統是沒有stolh()函數的(Short to Long Host ?)。
下面給出套接字位元組轉換程序的列表:
hotns()——"Host to NetWork Short",主機位元組順序轉換為網路位元組順序(對無符號短型進行操作 4bytes)
htonl()——"Host to NetWork Long",主機位元組順序轉換為網路位元組順序(對無符號長型進行操作 8bytes)
ntons()——"NetWork to Host short",網路位元組序轉換為主機位元組順序(對無符號短型進行操作 4bytes)
ntohl()——"NetWork to Host Long",網路位元組順序轉換為主機位元組順序(對無符號長型進行操作 8bytes)

例如:*.sin_addr.s_addr = htonl(innaddr_any)是什麼意思?
*.sin_addr.s_addr = htonl(innaddr_any)是Socket編程中用到的。
*是任意定義的一個sockaddr_in型的結構體對象sin_addr是他的一個屬性,用於定義IP地址,是strcut in_addr型的,s_addr為結構體in_addr的對象,簡單說就是三個結構體嵌套包裝的一個包。
inaddr_any一般為內核指定的,大多數系統取0,表示任意的IP地址。
htonl()簡單說是把一個本機IP轉化為網路協議中規定的格式的函數,也就是所謂的大端模式或小端模式。
htons函數是將一個u_short類型的值從主機位元組順序轉換為TCP/IP的網路位元組順序,原型聲明如下:
u_short htons(u_short hostshort);
htonl函數是將一個u_long的值從主機位元組順序轉換為TCP/IP的網路位元組順序,原型聲明如下:
u_long htonl(u_long hostlong);

位元組序和網路平台有關,不同的平台,位元組序不同。(位元組序顧名思義——位元組的排列順序)只有多於一個位元組的數據類型,才有位元組序的問題,比如short或者int類型。char是沒有這個問題的。位元組序就是在硬體裡面,一般實在內存里,如何表示存儲和表示這些數據類型。如果高位元組放到高地址上,就是大端(big endian),如果高位元組放到低地址上,就是小端模式(little endian)。

㈦ 如何判斷Linux系統是大端還是小端

不同機器內部對變數的位元組存儲順序不同,有的採用大端模式(big-endian),有的採用小端模式(little-endian)。 大端模式是指高位元組數據存放在低地址處,低位元組數據放在高地址處。 小端模式是指低位元組數據存放在低地址處,高位元組數據放在高地址處。...

㈧ Linux後台開發應該具備哪些技能

後台開發具備的技能還是有很多的,這里列出一些,僅供參考:
一、linux和os:
1、命令:netstat tcpmp ipcs ipcrm 這四個命令的熟練掌握程度基本上能體現實際開發和調試程序的經驗
2、cpu 內存 硬碟 等等與系統性能調試相關的命令必須熟練掌握,設置修改許可權 tcp網路狀態查看 各進程狀態 抓包相關等相關命令 必須熟練掌握
3、awk sed需掌握
4、共享內存的使用實現原理、然後共享內存段被映射進進程空間之後,存在於進程空間的什麼位置?共享內存段最大限制是多少?
5、c++進程內存空間分布(注意各部分的內存地址誰高誰低,注意棧從高道低分配,堆從低到高分配)
6、ELF是什麼?其大小與程序中全局變數的是否初始化有什麼關系(注意.bss段)
7、使用過哪些進程間通訊機制,並詳細說明
8、makefile編寫,雖然比較基礎,但是會被問到
9、gdb調試相關的經驗,會被問到
10、如何定位內存泄露?
11、動態鏈接和靜態鏈接的區別
12、32位系統一個進程最多多少堆內存
13、多線程和多進程的區別(重點 必須從cpu調度,上下文切換,數據共享,多核cup利用率,資源佔用,等等各方面回答,然後有一個問題必須會被問到:哪些東西是一個線程私有的?答案中必須包含寄存器,否則悲催)
14、寫一個c程序辨別系統是64位 or 32位
15、寫一個c程序辨別系統是大端or小端位元組序
16、信號:列出常見的信號,信號怎麼處理?
17、i++是否原子操作?並解釋為什麼???????
18、說出你所知道的各類linux系統的各類同步機制(重點),什麼是死鎖?如何避免死鎖(每個技術面試官必問)
19、列舉說明linux系統的各類非同步機制
20、exit() _exit()的區別?
21、如何實現守護進程?
22、linux的內存管理機制是什麼?
23、linux的任務調度機制是什麼?
24、標准庫函數和系統調用的區別?
25、補充一個坑爹坑爹坑爹坑爹的問題:系統如何將一個信號通知到進程?
二、c語言:
1、宏定義和展開(必須精通)
2、位操作(必須精通)
3、指針操作和計算(必須精通)
4、內存分配(必須精通)
5、各類庫函數必須非常熟練的實現
6、哪些庫函數屬於高危函數,為什麼?(strcpy等等)
三、c++:
1、一個String類的完整實現必須很快速寫出來(注意:賦值構造,operator=是關鍵)
2、虛函數的作用和實現原理(必問必考,實現原理必須很熟)
3、sizeof一個類求大小(注意成員變數,函數,虛函數,繼承等等對大小的影響)
4、指針和引用的區別(一般都會問到)
5、多重類構造和析構的順序
6、stl各容器的實現原理(必考)
7、extern c 是幹啥的,(必須將編譯器的函數名修飾的機制解答的很透徹)
8、volatile是幹啥用的,(必須將cpu的寄存器緩存機制回答的很透徹)
9、static const等等的用法,(能說出越多越好)
四、數據結構或者演算法:
1、《離散數學》范圍內的一切問題皆由可能被深入問到(這個最坑爹,最重要,最體現功底,最能加分,特別是各類樹結構的實現和應用)
2、各類排序:大根堆的實現,快排(如何避免最糟糕的狀態?),bitmap的運用等等
3、hash, 任何一個技術面試官必問(例如為什麼一般hashtable的桶數會取一個素數?如何有效避免hash結果值的碰撞)
五、網路編程:
1、tcp與udp的區別(必問)
2、udp調用connect有什麼作用?
3、tcp連接中時序圖,狀態圖,必須非常非常熟練
4、socket服務端的實現,select和epoll的區別(必問)
5、epoll哪些觸發模式,有啥區別?(必須非常詳盡的解釋水平觸發和邊緣觸發的區別,以及邊緣觸發在編程中要做哪些更多的確認)
6、大規模連接上來,並發模型怎麼設計
7、tcp結束連接怎麼握手,time_wait狀態是什麼,為什麼會有time_wait狀態?哪一方會有time_wait狀態,如何避免time_wait狀態佔用資源(必須回答的詳細)
8、tcp頭多少位元組?哪些欄位?(必問)
9、什麼是滑動窗口(必問)
10、connect會阻塞,怎麼解決?(必考必問,提示:設置非阻塞,返回之後用select檢測狀態)
11、如果select返回可讀,結果只讀到0位元組,什麼情況?
12、keepalive 是什麼東東?如何使用?
13、列舉你所知道的tcp選項,並說明其作用。
14、socket什麼情況下可讀?
六、db:
1、mysql,會考sql語言,伺服器資料庫大規模數據怎麼設計,db各種性能指標

㈨ 用宏判斷計算機處理器是大端位元組序(Big-Endian)還是小端位元組序(Little-Endian)

實現同樣的功能,我們來看看Linux 操作系統中相關的源代碼是怎麼做的:
static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } };

#define ENDIANNESS ((char)endian_test.mylong)
Linux 的內核作者們僅僅用一個union 變數和一個簡單的宏定義就實現了一大段代碼同樣的功能!由以上一段代碼我們可以深刻領會到Linux 源代碼的精妙之處!(如果ENDIANNESS=』l』表示系統為little endian,
為』b』表示big endian )

http://blog.chinaunix.net/uid-25367385-id-188322.html

熱點內容
電信光纖上傳限制 發布:2024-05-18 16:08:05 瀏覽:909
sql中的limit 發布:2024-05-18 16:05:57 瀏覽:895
啟動ug時伺服器無響應是怎麼回事 發布:2024-05-18 15:48:24 瀏覽:372
小數除法的計演算法則 發布:2024-05-18 15:36:52 瀏覽:530
安卓網卡免驅動如何實現 發布:2024-05-18 15:25:15 瀏覽:860
8加6演算法 發布:2024-05-18 15:04:25 瀏覽:738
名圖16款尊享什麼配置 發布:2024-05-18 14:55:37 瀏覽:585
我的世界怎樣刷出32k伺服器 發布:2024-05-18 14:32:32 瀏覽:565
c語言程序設計江寶釧 發布:2024-05-18 14:32:22 瀏覽:780
右擊文件夾總是轉圈圈 發布:2024-05-18 14:31:10 瀏覽:696