此程式實現兩個普通程序間通過共享記憶體來進行通訊,共享記憶體能夠進行大資料量的通訊,這一點事訊息佇列無法比擬的。在這裡同時使用了訊號量來保證兩個程序間的讀寫同步。
傳送端源**:
#include #include #include #include #include #include #include #include #include int main()
if(semctl(semid,0,setval,0)==-1)
exit(1);
} printf("sem init sucessful!\n");
key1=ftok(".",1254);
if((shmid=shmget(key1,2000,ipc_creat|shm_r|shm_w))==-1)
if((sharem=shmat(shmid,null,0))==null)
while(running)
if(!strncmp(buffer,"end",3))
}} sleep(10);
return 0;
}
接收端源**:
#include #include #include #include #include #include #include #include #include int main()
/* if(semctl(semid,0,setval,0)==-1)
exit(1);
}*/printf("sem init sucessful!\n");
key1=ftok(".",1254);
if((shmid=shmget(key1,2000,ipc_creat|shm_r|shm_w))==-1)
if((sharem=shmat(shmid,null,0))==null)
while(running)
if(0==strncmp(buffer,"end",3))
} //printf("");
} shmdt(sharem);
if(shmctl(shmid,ipc_rmid,0)==-1)
if(semctl(semid,ipc_rmid,0)==-1)
return 0;
}
程序間通訊之共享記憶體
1.概念 共享記憶體就是多個程序的位址空間對映到同乙個物理記憶體,多個程序都能看到這塊物理記憶體,共享記憶體可以提供給伺服器程序和客戶程序之間進行通訊,不需要進行資料的複製,所以速度最快。2.共享記憶體操作需要的函式 1 我們需要利用ftok函式生成key識別符號。key t ftok const ...
程序間通訊之共享記憶體
ipc物件這個概念需要理解,因為好多書或者料就直接說ipc就是共享記憶體 訊息佇列 訊號燈集,其實ipc是一種機制,這種機制提供了程序間通訊的通道,那麼為什麼加個system v呢,那是因為在system v 系統的四個版本中提出的程序通訊的ipc這種機制。所以叫做system v ipc。目前li...
程序間通訊之共享記憶體
繼學習過程序間通訊的兩種方式管道和訊息佇列之後,接下來就要學習乙個速度最快的 程序間通訊的方式 共享記憶體。為什麼說共享記憶體是最快的ipc形式呢?因為它省掉了兩次資料拷貝的過程。一旦這樣的記憶體對映到共享 他的程序的位址空間,這些程序間資料傳遞不在涉及到核心 就是程序不在通過執行進入核心的系統呼叫...