嵌入式Linux應用開發 程序通訊 管道

2021-10-11 19:03:59 字數 2363 閱讀 9068

目錄

程序間通訊概述

管道通訊

訊號通訊

共享記憶體

程序間通訊概述

為什麼需要程序間通訊?

資料傳輸:乙個程序需要將它的資料傳送給另乙個程序

資源共享:多個程序之間共享相同的資源。

事件通知:乙個程序需要向另乙個或一組程序傳送訊息,通知它們傳送了某種事件。

程序控制:有些程序希望完全控制另乙個程序的執行(如debug程序)此時控制程序希望能夠攔截另乙個程序所有操作,並能及時知道它的狀態改變

linux程序間通訊(ipc)由下面及部分發展而來:

unix程序間通訊

基於system v程序間通訊

posix程序間通訊

什麼是管道?

管道是單向的、先進先出的,它把乙個程序的輸出和另乙個程序的輸入連線在一起。

乙個程序(寫程序)在管道的尾部寫入資料,另乙個程序(讀程序)從管道的頭部讀出資料。

管道包括無名管道和有名管道兩種:

無名管道用於父程序和子程序間的通訊

有名管道用於執行於同一系統中的任意兩個程序間的通訊。

無名管道由pipe()函式建立:int pipe(int fieldis[2]);

當乙個管道建立時,它會

建立兩個檔案描述符:

fieldis[0]用於讀管道,fieldis[1]用於寫管道

管道關閉:關閉管道只需要將這兩個檔案描述符關閉即可,可以使用普通的close函式逐個關閉。

/*建立子程序*/

if((pid = fork())==0)

close(pipe_fd[0]);

exit(0);

} else if(pid>0)

return 0;

}**執行結果:

有名管道:與無名管道基本相同,不同點在於:無名管道只能由父子程序使用,但是通過有名管道,不相關的程序也能交換資料。

/*向管道寫入資料*/

if((nwrite = write(fd,w_buf,100))==-1) }

else

return 0;

}

#include #include #include #include #include #include #include #include #define fifo "/tmp/myfifo"

int main(int argc,char **ar**)

while(1)

printf("read %s from fifo\n",r_buf);

sleep(1);

} pause();

return 0;

}

linux嵌入式開發

我的環境 主機 ubuntu 64位 開發板 mini2440 6 makefile檔案修改 在 opt friendlyarm mini2440 linux 2.6.29下執行 sudo vi.makefile 搜尋arm linux得到乙個結果 cross compile?arm linux 然...

嵌入式Linux開發流程

在乙個嵌入式系統中使用linux開發,根據應用需求的不同有不同的配置開發方法,但是一般都要經過如下的過程.1 1 建立開發環境 2 2 配置開發主機 配置minicom,一般的引數為波特率為115 200bps,資料位為8位,停止位為1,無奇偶校驗,軟體硬體流控設為無。在windows下的超級終端的...

嵌入式Linux開發流程

在學習嵌入式開發的過程中,尤其是開始入門時,包括各種各樣的教程,都是在講學習linux,很少講如何利用linux來開發屬於自己的嵌入式專案,也就是沒有乙個全域性的概念,簡單理解,大概流程如下 一 建立開發環境 這一步,就相當於在win系統下,要安裝乙個ide開發環境,如mdk,iar等。二 配置開發...