簡體   English   中英

POSIX共享內存寫入/讀取

[英]POSIX Shared Memory writing/reading

我正在閱讀本教科書的POSIX共享內存部分。 在進行一些更改之前,我無法從書中獲取代碼進行編譯。 我了解共享內存的概念以及如何打開它,但是我仍然對讀/寫感到困惑。 教科書代碼顯示了一個hello world字符串示例,但我不確定如何將其應用於int,數組,結構等。這是我正在使用的教科書代碼。 這是寫的。

const int SIZE = 4096;
const char *name = "OS";
const char *message_0 = "Hello";
const char *message_1 = "World!";

int shm_fd;
void *ptr;

shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
ftruncate(shm_fd, SIZE);
ptr = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0);

//sprintf(ptr, "%s", message_0); //non working text book code
sprintf((char*)ptr, "%s", message_0); //my change to get it to work
ptr += strlen(message_0);
//sprintf(ptr, "%s", message_1);
sprintf((char*)ptr, "%s", message_1);
ptr += strlen(message_1);

這是讀物。

    const int SIZE = 4096;
    const char *name = "OS";
    int shm_fd;
    void *ptr;

    shm_fd = shm_open(name, O_RDONLY, 0666);
    ptr = mmap(0, SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);

    printf("%s", (char*)ptr);
    shm_unlink(name);

我試圖將其更改為寫入/讀取整數,但無法使其正常工作。 我的印象是,我應該能夠為int做一些事情,例如:

*ptr = 2;
ptr++;

但是,我無法做到這一點,或者我嘗試工作的任何其他方式。 誰能更好地解釋它? 謝謝。

您可以將mmap結果轉換為int *或double *或任何您喜歡的值。 您可以做的一件事是將結構覆蓋到共享內存上:

struct MyStruct
{
    int s_int;
    char s_str[64];
};

void* mem = mmap ...
struct MyStruct* sp = (struct MyStruct*)mem;

/* writing */
sp->s_int = 3;
strcpy(sp->s_str, "Hello");

/* reading */
printf("s_int=%d, s_str=%s\n", sp->s_int, sp->s_str);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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