目錄
程序間通訊概述
管道通訊
訊號通訊
共享記憶體
程序間通訊概述
為什麼需要程序間通訊?
資料傳輸:乙個程序需要將它的資料傳送給另乙個程序
資源共享:多個程序之間共享相同的資源。
事件通知:乙個程序需要向另乙個或一組程序傳送訊息,通知它們傳送了某種事件。
程序控制:有些程序希望完全控制另乙個程序的執行(如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等。二 配置開發...