Ниже кода сервера, который содержит строку в переменной разделяемой памяти.Совместно используемая память с использованием семафора
Код клиента отображает строку, доступную в общей памяти.
ПОЛНЫЙ Код: available in this github link
Server.c
int main(int argc, char *argv[])
{
/* code to create posix shared memory and posix named semaphore */
/* critical section start */
snprintf(shared_msg->content, MAX_MSG_LENGTH, "%s", argv[1]);
/* critical section end */
}
Client.c
int main(int argc, char *argv[])
{
/* code to open posix shared memory and posix named semaphore */
for(i=0; i<20; i++){
/* critical section start */
//operation of semaphore
while(loop < 15){
printf("Type : %d, content : %s\n", shared_msg->type, shared_msg->content);
sleep(1);
loop++;
}
/* Critical section end */
loop = 0;
printf("loop %d finished\n", i);
}
}
Как использовать (ждать и пост) POSIX семафор в коде выше, для достижения следующих требований
- При запуске клиента он должен отображать данные разделяемой памяти. как только внутренний цикл цикла будет завершен, тогда только клиент освободит общую память.
- Если сервер запускается и пытается записать данные в общую память, когда клиент во время цикла работает, семафор не будет писать, чтобы написать, пока клиент не выпустит семафор.
- В однолинейном сервере должен писать, когда клиент освободит семафор
Спасибо.
Вы пробовали 'человек sem_overview' на командная строка? –
есть. Тем не менее я получаю некоторую борьбу. – sujin
Какой клиентский сервер связывается через общую память? Почему бы не использовать трубы или розетки? –