共享内存和IPC故障

时间:2017-02-08 11:43:27

标签: c ipc shared-memory

我很早就接受了考试,但是这段代码遇到了很大的麻烦,它编译但是我不知道它为什么会阻塞。

在Ubuntu 16.04上没有使用gcc的最新版本编译的警告没有错误,标题位于common.h且它们是正确的:

#include "common.h"

int main()
{
    printf("Hello world!\n");
    pid_t pid;
    int shm = shmget(IPC_PRIVATE, sizeof(Esame), IPC_CREAT | 0664);
    int sem = semget(IPC_PRIVATE, 3, IPC_CREAT | 0664);

    semctl(sem, MUTEX, SETVAL, 1);
    semctl(sem, PRENOTATI, SETVAL, 1);
    semctl(sem, APPELLO, SETVAL, 1);

    Esame* e = (Esame*)shmat(shm, 0, 0);
    e->prenotati = 0;

    pid = fork();

    if (pid == 0)
    {

        docente(sem, e);
        exit(0);
    }

    int i = 0;

    while (i < NSTUDENTI)
    {
        pid = fork();

        if (pid == 0)
        {
            studente(sem, e);
            exit(0);
        }
        i++;
    }

    i = 0;
    while (i < NSTUDENTI + 1)
    {
        wait(0);
        i++;
    }
    shmctl(shm, IPC_RMID, 0);
    semctl(sem, 0, IPC_RMID);

    return 0;
}

0 个答案:

没有答案