ARM環境中的c語言socket程序通訊 轉

2021-07-09 12:05:18 字數 2170 閱讀 9563

近由於需要弄一些android底層的程序間通訊的東西,所以重溫了一下linux的程序通訊知識。

程序間通訊有很多種方法,使用socket只是其中的一種方法,使用socket的好處呢,就是通用,**可以在很多平台上直接編譯,效率也很高的。

實際上,在android系統中,絕大多數的api 都使用了socket與底層的本地服務通訊,這樣做到了應用程式介面和底層框架分離的原則。用這種方式封裝的api 更加安全,不存在**進入核心態的問題,也不存在函式堆疊溢位的問題。所以說android系統比傳統的作業系統更加安全是有道理的。

下面是乙個通用的linux的socket ipc的例子,這個例子的詳細解釋可以參照這裡的描述:

這個例子的好處呢,就是通用,在所有的linux系統下均可以編譯使用。經測試,在x86和arm下都可以正常使用。

這個例子我編譯的時候使用了arm c語言的交叉編譯環境,至於如何搭建arm交叉編譯環境,可以參照這裡的方法:

server.c 編譯方法:arm-linux-androideabi-gcc -o server server.c

01#include

02#include

03#include

04#include

05#include

06#include

07#include

08 09#define server_name "@server_socket"

10/*

11 * create a unix-domain socket address in the linux "abstract namespace".

12 *

13 * the socket code doesn't require null termination on the filename, but

14 * we do it anyway so string functions work.

15 */

16int makeaddr(const char* name, struct sockaddr_un* paddr, socklen_t* psocklen)

1727 

28int main()

29 30

62 63        //read  data from client socket

64        nread = read(client_sockfd, &ch, 1);

65        if(nread == 0)

69        else

74        usleep(100);//1000 miliseconds = 1 second

75    }

76 77    return 0;

78 79}

client.c 編譯:arm-linux-androideabi-gcc -o client client.c

01#include

02#include

03#include

04#include

05#include

06#include

07#include

08#define server_name "@server_socket"

09/*

10 * create a unix-domain socket address in the linux "abstract namespace".

11 *

12 * the socket code doesn't require null termination on the filename, but

13 * we do it anyway so string functions work.

14 */

15int makeaddr(const char* name, struct sockaddr_un* paddr, socklen_t* psocklen)

1626 

27int main()

2851    //communicate with server socket

52    while(1)

53    

62    exit(0);

63 64}

分別把client 和 server 上傳到arm的板子或者 android手機上,用命令列執行就可以測試效果了。

arm體系中c語言的資料型別

1 unsigned long unsigned long int 2者是等價的,均是無符號整形變數,在arm9中佔4個位元組,int可省略不寫 2 const是乙個c語言的關鍵字,它限定乙個變數不允許被改變。3 區域性變數,可與全域性變數重名,但其會遮蔽全域性變數,在函式內引用這個變數時,會用到同...

在ARM開發板上搭建 C語言 環境

相關概念 棧是一種具有後進先出性質的資料組織方式,也就是說後存放的先取出,先存放的後取出。棧底是第乙個進棧的資料所處的位置,棧頂是最後乙個進棧的資料所處的位置。根據sp指標指向的位置,棧可以分為滿棧和空棧。1 滿棧 當堆疊指標sp總是指向最後壓入堆疊的資料。2 空棧 當堆疊指標sp總是指向下乙個將要...

基於ARM的高效C語言程式設計

arm處理器提高執行速度和減小 尺寸是嵌入式軟體設計的關鍵需求,以其高效能 低功耗 低成本等優勢被廣泛應用於各種成功的32位嵌入式系統中。儘管大多數的arm編譯器和偵錯程式都帶有效能優化工具,但是為了保證其正確性,編譯器必須是穩妥和安全的,而且它還受到處理器自身結構的限制。因此,程式設計人員必須在理...