fd
:要對映的檔案的fd
。通過open()
函式得到
offset
:對映的時候檔案指標的偏移量
返回值int munmap(void* addr,size_t length);
通過在記憶體中建立檔案的對映區實現兩個程序間通過該對映區通訊
a程序寫b程序讀,當a程序寫的東西比較多時可能會出現a沒寫完,b已經讀完了
#include
#include
#include
#include
#include
#include
intmain()
//計算檔案大小
int len =
lseek
(fd,0,
seek_end);
//建立記憶體對映區
void
* ptr =
mmap
(null
,len,prot_read|prot_write,map_shared,fd,0)
;if(ptr == map_failed)
//建立子程序,進行程序間通訊
pid_t pid =
fork()
;if(pid ==-1
)else
if(pid ==0)
else
//釋放記憶體對映區,關閉檔案
munmap
(ptr,len)
;close
(fd)
;return0;
}
上段**檔案」hello「的作用很小,所以有了下段建立匿名記憶體對映區的方法
與上段**的差別
#include
#include
#include
#include
#include
#include
intmain()
//建立子程序,進行程序間通訊
pid_t pid =
fork()
;if(pid ==-1
)else
if(pid ==0)
else
//釋放記憶體對映區,關閉檔案
munmap
(ptr,len)
;return0;
}
#include
#include
#include
#include
#include
#include
intmain()
ftruncate
(fd,
4096);
//計算出檔案長度,用來指定開闢的對映區大小
int len =
lseek
(fd,0,
seek_end);
//建立記憶體對映區
void
* ptr =
mmap
(null
,len,prot_read|prot_write,map_shared,fd,0)
;if(ptr == map_failed)
while(1
)//釋放記憶體對映區
uunmap
(ptr,len)
;//關閉檔案
close
(fd)
;return0;
}
寫
#include
#include
#include
#include
#include
#include
#include
intmain()
ftruncate
(fd,
4096);
//計算出檔案長度,用來指定開闢的對映區大小
int len =
lseek
(fd,0,
seek_end);
//建立記憶體對映區
void
* ptr =
mmap
(null
,len,prot_read|prot_write,map_shared,fd,0)
;if(ptr == map_failed)
char
*buf =
"沒有血緣關係的程序間通訊\n"
;while(1
)//釋放記憶體對映區
uunmap
(ptr,len)
;//關閉檔案
close
(fd)
;return0;
}
linux系統程式設計 程序間通訊 pipe
程序間通訊 pipe 每個程序各自有不同的使用者位址空間,任何乙個程序的全域性變數在另乙個程序中都看不到,所以程序之間要交換資料必須通過核心,在核心中開闢一塊緩衝區,程序1把資料從使用者空間拷到核心緩衝區,程序2再從核心緩衝區把資料讀走,核心提供的這種機制稱為程序間通訊 ipc,interproce...
Linux系統程式設計 程序間通訊 IPC
利用檔案進行程序間通訊的程式示例 include include include include include include intmain if pid 0 write fd1,str,strlen str printf child wrote over n if pid 0 sleep 1 ...
Linux系統程式設計 程序間通訊(一)
linux系統主要的程序間通訊機制如下 無名管道 pipe 及命名管道 named pipe 無名管道可用於具有父子關係程序間的通訊 命名管道用於無父子關係的程序之間的通訊。無父子關係的程序可將資訊傳送到某個命名管道中,通過管道名讀取資訊 訊號 signal 程序間的高階通訊方式,用於通知其他程序有...