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 に答える