Проблема записи и чтения из общей памяти c

Цель этого кода - создать пространство общей памяти и записать в него значение n в дочернем элементе, а затем распечатать все числа, сгенерированные в родительском процессе. Но в настоящее время это просто распечатывает адреса памяти, такие как 16481443B4, которые меняются каждый раз, когда я запускаю программу. Я не уверен, неправильно ли я пишу в общую память или неправильно читаю из общей памяти. Возможно, оба.

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <wait.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/shm.h>
#include <sys/mman.h>

int main(int argc, char** argv){

    //shared memory file descriptor
    int shm_fd;

    //pointer to shared memory obj
    void *ptr;
    //name of shared obj space
    const char* name = "COLLATZ";

    //size of the space
    const int SIZE = 4096;

    //create a shared memory obj
    shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);

    //config size
    ftruncate(shm_fd, SIZE);

    //memory map the shared memory obj
    ptr = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0);

    int n = atoi(argv[1]);
    pid_t id = fork();

    if(id == 0) {
        while(n>1) {
            sprintf(ptr, "%d",n);
            ptr += sizeof(n);
            if (n % 2 == 0) {
                n = n/2;
            } else {
                n = 3 * n + 1;
            }
        }
        sprintf(ptr,"%d",n);
        ptr += sizeof(n);
    } else {
        wait(NULL);
        printf("%d\n",(int*)ptr);
    }

    //Umap the obj
    munmap(ptr, SIZE);

    //close shared memory space
    close(shm_fd);

    return 0;
}

1 ответ

Слушай свой компилятор!

$ gcc main.c -lrt
main.c: In function 'main':
main.c:51:9: warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
  printf("%d\n",(int*)ptr);
         ^

Assuming you want to print the integer pointed to by ptr, так должно быть:

printf("%d\n",*((int*)ptr));
Другие вопросы по тегам