Основы операционных систем. Практикум



         

Example.6.3b - часть 2


exit(-1);

}

new = 0;

}

}

/* Пытаемся отобразить разделяемую память в адресное

пространство текущего процесса. Обратите внимание на то,

что для правильного сравнения мы явно преобразовываем

значение -1 к указателю на целое.*/

if((array = (int *)shmat(shmid, NULL, 0)) ==

(int *)(-1)){

printf("Can't attach shared memory\n");

exit(-1);

}

/* В зависимости от значения флага new либо

инициализируем массив, либо увеличиваем

соответствующие счетчики */

if(new){

array[0] = 0;

array[1] = 1;

array[2] = 1;

} else {

array[1] += 1;

for(i=0; i<1000000000L; i++);

/* Предельное значение для i может меняться в зависимости

от производительности компьютера */

array[2] += 1;

}

/* Печатаем новые значения счетчиков, удаляем разделяемую

память из адресного пространства текущего процесса и завершаем

работу */

printf("Program 1 was spawn %d times,

program 2 - %d times, total - %d times\n",

array[0], array[1], array[2]);

if(shmdt(array) < 0){

printf("Can't detach shared memory\n");

exit(-1);

}

return 0;

}




Содержание  Назад  Вперед