为啥我这里没有错误?

Posted

技术标签:

【中文标题】为啥我这里没有错误?【英文标题】: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 会出现的具体原因有哪些? 【参考方案1】:

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

【讨论】:

以上是关于为啥我这里没有错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该没有错时却出现链接错误

为啥在增加数组名称时没有“需要左值”错误[重复]

为啥 OleDbCommand 和 OleDbType.Date 不起作用,并且没有错误?

为啥变量没有更新?任何逻辑

在 Python 中,为啥为没有定义超类的类调用 super() 函数不是错误? [复制]

为啥我的 JavaScript 函数显然没有被调用?