Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Флаговая переменная, доступ к разделяемой памяти 
:(
    Опции темы
Xonxt
Дата 9.1.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 24.1.2006
Где: Украина / Одесса

Репутация: нет
Всего: 1



Доброе время суток.

интересует такой тривиальный вопрос. Увы, гугл ответить не может.

Есть 2 отдельных приложения. Грубо говоря, клиент и сервер.

Сервер че-то записывает в разделяемую память, а клиент должен оттуда это прочитать и вывести на экран.

Фича в том, что доступ к этой самой разделяемой памяти надо обеспечить с помощью флаговой переменной.
Т.е. не семафоры, не еще одна разделяемая память.. просто переменная... Вот как это сделать можно?

Была у меня такая мысль, что сервер может эту флаговую переменнуб записывать в файл, а клиент будет крутиться в бесконечном цикле до тех пор, пока не прочитает эту переменную из файла.. но, имхо, это бред.
или можно попытаться передавать эту флаговую переменнуб в очереди сообщений.. но это тоже бред..


PM MAIL ICQ Skype   Вверх
JackYF
Дата 9.1.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



А почему не заюзать fifo и стандартное read в клиенте и write в сервере?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Xonxt
Дата 9.1.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 24.1.2006
Где: Украина / Одесса

Репутация: нет
Всего: 1



Потому что это лабораторная работа smile

Задание так выглядит:

1.    Первое приложение читает слово из текстового файла,  помещая его в участок разделяемой памяти.
2.    Второе приложение  из участка разделяемой памяти выводит слово на экран.
3.    Синхронизировать доступ к участку разделяемой памяти  при помощи флаговой переменной.

PM MAIL ICQ Skype   Вверх
bsa
Дата 9.1.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Xonxt, ну тогда заведи в той же самой разделяемой памяти атомарную переменную. значение 0 означает можно читать файл и писать в эту область, значение 1 значит, что файл прочитан и область заполнена. Итого, если 0 второй процесс ждет, первый читает и переводит в 1, после этого первый ждет, второй работает и переводит в 0...
PM   Вверх
Xonxt
Дата 9.1.2008, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 24.1.2006
Где: Украина / Одесса

Репутация: нет
Всего: 1



В этом-то и проблема. 
Мне с помощью флаговой переменной нужно блокировать доступ клиента к разделяемой памяти, а не размещать этот флаг внутри той же разделяемой памяти..

хотя, конечно, можно выделить отдельный небольшой участок памяти...
PM MAIL ICQ Skype   Вверх
Xonxt
Дата 9.1.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 24.1.2006
Где: Украина / Одесса

Репутация: нет
Всего: 1



Ну, допустим, проблема решена.

Но еще одна проблема возникла..

Можно ли попросить, дорогие форумчане,  простейший пример с двумя приложениями, использующими разделяемую память, и с семафорами? А то не могу вьехать....  smile 
PM MAIL ICQ Skype   Вверх
rei3er
Дата 10.1.2008, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 21.9.2007

Репутация: нет
Всего: нет



Цитата(Xonxt @  9.1.2008,  22:12 Найти цитируемый пост)
Можно ли попросить, дорогие форумчане,  простейший пример с двумя приложениями, использующими разделяемую память, и с семафорами? А то не могу вьехать.... 

Код

static struct sembuf down = {0, -1, 0};
static struct sembuf up = {0, 1, 0};

static void client(int sem_id, void * shared_area) {
    struct sembuf wait = {0, 0, 0};
    semop(sem_id, &wait, 1);
    /* работа с разделяемой памятью */
    semop(sem_id, &up, 1);
}

static void server(int sem_id, void * shared_area) {
    /* значение семафора должно быть 1 */
    struct sembuf wait = {0, 0, IPC_NOWAIT};
    while (1) {
        /* работа с разделяемой памятью */
        semop(sem_id, &down, 1);
        while (!semop(sem_id, &wait, 1));
    }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.