【问题标题】:Why don't I get an error here?为什么我这里没有错误?
【发布时间】:2012-09-19 01:32:21
【问题描述】:

当我从同一个共享内存段读取和写入时,为什么无法获得 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);
    }
}

【问题讨论】:

  • 您认为SIGSEGV 会出现的具体原因有哪些?

标签: c linux unix ipc shared-memory


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2020-01-26
    • 2020-08-03
    相关资源
    最近更新 更多