[英]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.