近由於需要弄一些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編譯器和偵錯程式都帶有效能優化工具,但是為了保證其正確性,編譯器必須是穩妥和安全的,而且它還受到處理器自身結構的限制。因此,程式設計人員必須在理...