linux作業系統之程序間通訊 共享記憶體

2021-08-19 10:04:47 字數 1166 閱讀 7339

共享儲存對映

檔案程序間通訊

使用檔案也可以完成ipc,理論依據是,fork後,父子程序共享檔案描述符。也就共享開啟的檔案。

練習:程式設計測試,父子程序共享開啟的檔案。借助檔案進行程序間通訊。

思考,無血緣關係的程序可以開啟同乙個檔案進行通訊嗎?為什麼?

/*使用檔案完成程序間通訊*/

#include#include#include#include#include#include#include#includeint main()

else if(pid == 0)

write(fd1,str,strlen(str));//子程序往檔案裡寫

printf("child write over.\n");

}else

sleep(2);

int len = read(fd2,buf,sizeof(buf));//父程序從檔案讀

write(stdout_fileno,buf,len);//列印

wait(null);//**子程序

}return 0;

}

1mmap函式:引數;返回值

void *mmap(void *adrr, size_t length, int prot, int flags, int fd, off_t offset);

返回:成功:返回建立的對映區首位址;失敗:map_failed巨集

引數:

addr: 建立對映區的首位址,由linux核心指定。使用時,直接傳遞null

length: 欲建立對映區的大小

prot: 對映區許可權prot_read、prot_write、prot_read|prot_write

flags: 標誌位引數(常用於設定更新物理區域、設定共享、建立匿名對映區)

map_shared: 會將對映區所做的操作反映到物理裝置(磁碟)上。

map_private: 對映區所做的修改不會反映到物理裝置。

fd: 用來建立對映區的檔案描述符

offset: 對映檔案的偏移(4k的整數倍)

2 借助共享記憶體存放磁碟檔案。借助指標訪問磁碟檔案。

3 父子程序、血緣關係程序 通訊

4 匿名對映區

作業系統 程序間通訊

程序間通訊涉及到3個問題 1.乙個程序如何把資訊傳遞給另乙個程序 2.確保兩個或多個程序之間不會在關鍵活動中出現交叉 3.程序間執行的順序對執行結果的影響。注意 確保程序對臨界區的 互斥 訪問。忙等待的互斥 1.遮蔽中斷 當乙個程序進入臨界區後立即遮蔽所有中斷,時鐘中斷也被遮蔽 這樣cpu就不會進行...

作業系統 程序間通訊

include include include include include include ifndef semun h 條件編譯,即若semun在標頭檔案中沒有被定義,就進行下面的編譯 define semun h union semun endif static int set semval...

作業系統 程序間通訊

程序間通訊方式總結 優缺點 linus下的程序通訊手段基本上是從unix平台上的程序通訊手段繼承而來的。1 無名管道通訊 半雙工通訊,只能在具有親緣關係的程序間使用 1 管道 2 高階管道通訊 將另乙個程式當做乙個新的程序在當前程式程序中啟動,則它算是當前程式的子 程序 3 有名管道通訊 半雙工通訊...