在此共享内存代码中出现分段错误?

时间:2020-10-23 02:46:24

标签: linux operating-system shared-memory pid

当我编译main()并运行它时,我一直在终端中获取segmentation fault 11。谁能帮我哪一部分出错了?下面是我的main()代码

int main(){
    pid_t pid;
    int shmid, status;
    int *a, *b, i;
    
    shmid = shmget(IPC_PRIVATE, 10*sizeof(int),IPC_CREAT|0666);

    pid = fork();
    if (pid==0){ //child
        
        b = (int *) shmat(shmid, 0, 0);

        for (i=0;i<5;i++){
            printf("\t Child iterating %d time, reading b[%d] = %d.\n", i, i, b[i]);
        }
        shmdt(b);
    }

    else{ //parent
        a = (int *) shmat(shmid, 0, 0);
    
        sleep(1);
        for (i=0;i<5;i++){
            kill(pid, SIGSTOP);
            a[i] = i;
            printf("Parent iterating %d time, writing a[%d] = %d.\n", i, i, a[i]);

            kill(pid, SIGCONT);
            
        }
        wait(&status);  

        shmdt(a);

        shmctl(shmid, IPC_RMID, 0);
    }
}

此外,我期望该输出如下所示。所以我使用了SIGSTOPSIGCONT ...我是否正确使用了它?

父级迭代0次,写入a [0] = 0

孩子迭代0次,读取b [0] = 0

父级迭代1次,写a [1] = 1

孩子迭代1次,读取b [1] = 1

父级迭代2次,写a [2] = 2

孩子迭代2次,读取b [2] = 2

父级迭代3次,写a [3] = 3

孩子迭代3次,读取b [3] = 3

父级迭代4次,写a [4] = 4

孩子迭代4次,读取b [4] = 4

0 个答案:

没有答案