[英]Ubuntu Shared Memory Between 2 Processes, Code Not Working
我分別編寫了兩個進程,這些進程應該通過共享內存進行交互,但我無法發現我要去哪里。 第一個過程肯定創建了共享內存,如果重新編程,它也可以從共享內存中讀取。
但是,第二個Output程序似乎根本無法讀取。 我在兩個程序中都使用shmget創建內存,然后將其加入。 我在輸入程序中插入了char數組nameArray,然后Output應該從共享內存中讀取它並指定名稱。
任何幫助表示贊賞,代碼如下:)
輸入:
#include <iostream>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#define SHM_KEY 982
using namespace std;
main()
{
int shmid;
char nameArray[] = "Bill Gates";
unsigned length = sizeof(nameArray)/sizeof(nameArray[0]);
shmid=shmget(SHM_KEY,256,0777|IPC_CREAT);
if(shmid!=(-1)) /*Error checking measure to ensure shared memory creation was successful*/
{
char * ptr=(char *)shmat(shmid,0,0); /*Assigns the char pointer to the start of shared memory*/
for(int i=0; i<length;i++) /*For every letter in the nameArray*/
{
ptr=(char *)shmat(shmid,0,i);
*ptr=nameArray[i]; /*Sends the local char array to shared memory*/
}
}
else /*Displays Error message given shared memory creation failue*/
{
cout << "Sorry, shared memory creation failed"
}
}
輸出:
#include <iostream>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#define SHM_KEY 982
using namespace std;
main()
{
int shmid;
char nameArray[20];
shmid=shmget(SHM_KEY,256,0777|IPC_CREAT);
if(shmid!=(-1)) /*Error checking measure to ensure shared memory creation was successful*/
{
char * ptr=(char *)shmat(shmid,0,0);
for(int i=0; i<11;i++)
{
cout << *((char *)shmat(shmid,0,i));
}
}
else{}
}
編碼
for(int i=0; i<length;i++) /*For every letter in the nameArray*/
{
ptr=(char *)shmat(shmid,0,i);
*ptr=nameArray[i]; /*Sends the local char array to shared memory*/
}
沒有按照您認為的去做。 每次對shmat
調用都會將整個共享內存段附加到另一個地址,並帶有不同的標志(范圍從0
到length
;大多數標志沒有意義)。
從循環中刪除shmat
調用。 您真正需要的是
for(int i=0; i<length;i++) /*For every letter in the nameArray*/
{
ptr[i]=nameArray[i]; /*Sends the local char array to shared memory*/
}
以及其他程序中的類似更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.