ошибка плохого исполнения (курс операционной системы) нужно объяснить - PullRequest
2 голосов
/ 20 ноября 2010

Я написал в своей записной книжке приведенный ниже код и теперь пишу его в xcode, и это вывод учителя:

child reads : 0,1
parent write: 1,2
child reads : 1,2
parent write: 3,5
child reads : 3,5
parent write: 8,13
child reads : 8,13

Я не могу получить вывод из-за этих 2 ошибок:

1 - Получен сигнал программы: «EXC_BAD_ACCESS».и отметьте строку a[0]

2-предупреждение: передача аргумента 1 'wait' делает указатель из целого числа без приведения

Код:

#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <unistd.h>
#include <sys/wait.h> 
int main (int argc, const char * argv[]) {

    int shmid ,*a,*b,i;
    shmid = shmget(IPC_PRIVATE, 2*sizeof(int), 0777/IPC_CREAT);
    int pid = fork();
    if (pid == 0) {
        b=(int *)shmat(shmid, 0, 0);
        for(i = 0; i < 10;i++){

            sleep(1);
            printf("child reads: %d,%d\n",b[0],b[1]);
        }
    }

    else {
        a= (int *)shmat(shmid, 0, 0);
        a[0] = 0; //after compile this line marked in red
        a[1] = 1;
        for(i = 0; i <10;i++){

            sleep(1);
            a[0] = a[0] + a[1];
            a[1] = a[0] + a[1];
            printf("Parent write:%d,%d\n",a[0],a[1]);
        }
        wait(pid);//warning message above
    }

    return 0;
}

МожетКто-нибудь объяснит, почему это происходит?

Ответы [ 2 ]

2 голосов
/ 20 ноября 2010

0777/IPC_CREAT должно быть 0777|IPC_CREAT (логическое ИЛИ, а не деление).

0 голосов
/ 20 ноября 2010

Для проблемы с wait см. man waitpid.

...