簡體   English   中英

Ubuntu在兩個進程之間共享內存,代碼不起作用

[英]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調用都會將整個共享內存段附加到另一個地址,並帶有不同的標志(范圍從0length ;大多數標志沒有意義)。

從循環中刪除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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM