0

当我从同一个共享内存段读取和写入时,为什么无法获得 sigsegv 或其他东西?正常吗?为什么我没有收到任何错误?

(我知道我不叫 shmclt 或 shmdt)(:

#include <stdio.h>
#include <sys/shm.h>
#include <sys/stat.h>

int parent(char*);
int child(char*);

int main ()
{
    int shmid = shmget (0xACA0E5,30*sizeof(char),
                IPC_CREAT | S_IRUSR | S_IWUSR);

    char *shared = (char*) shmat(shmid,0,0);

    if (fork())
        return parent(shared);
    else
        return child(shared);

}

int parent (char* shared)
{
    while(1)
    {
        printf("F: %s",shared);
        sprintf(shared,"FATHER \t%p\n",shared);
    }
}


int child(char* shared)
{
    while(1)
    {
        printf("C: %s",shared);
        sprintf(shared,"CHILD \t%p\n",shared);
    }
}
4

1 回答 1

2

是的,这种行为是完全正常的。操作系统不会阻止您覆盖共享内存段中自己的数据。如果你想避免这种情况,你需要引入某种 IPC 来同步对共享内存区域的访问。

于 2012-09-19T01:37:52.240 回答