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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блокировка файла 
V
    Опции темы
andrew_121
Дата 14.8.2009, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Здравствуйте.

Задача: Первый процесс пишет в файл, второй читает. Как сделать блокировку? ...Пока первый пишет, если второй попытается открыть файл в это время, чтоб он не получал ошибку, а просто застывал пока файл не освободит первый процесс. И на оборот.

Спасибо!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 14.8.2009, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



нужно создать глобальный именованный мьютекс, с именем, зависящим от имени файла, и каждый процесс должен пытаться захватить этот мьютекс, а уже потом писать в файл
в windows это просто, нужно просто создать мьютекс в глобальном пространстве имен, либо просто заблокировать часть файла, в которую пишешь ф-й LockFile, а в linux, нужно создать именованную разделяемую память, в ней создать мьютекс(мне одному кажется, что это равносильно удалению гланд через задницу?), и далее действовать так, как описано выше, либо, там должен быть свой аналог LockFile(Ex) smile 
PM MAIL Skype GTalk   Вверх
cristaloleg
Дата 14.8.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А если создать переменную bool в которую запиывается true как только вызывается 1-я ф-ция и присваиватся false как только ф-ция завершиться, а 2-я ф-ция будет проверять и реагировать на это...
PM   Вверх
Lazin
Дата 14.8.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(cristaloleg @  14.8.2009,  09:20 Найти цитируемый пост)
А если создать переменную bool в которую запиывается true как только вызывается 1-я ф-ция и присваиватся false как только ф-ция завершиться, а 2-я ф-ция будет проверять и реагировать на это... 


Цитата(andrew_121 @  14.8.2009,  01:49 Найти цитируемый пост)
Первый процесс пишет в файл, второй читает.
 smile 

PM MAIL Skype GTalk   Вверх
GrayCardinal
Дата 14.8.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



andrew_121, 
1. IPC мьютекс.
2. flock(2)
3. link(2)
Какой вариант интересует ?  smile Я бы второй заюзал...

Добавлено через 11 минут и 1 секунду
Lazin, 
Извините, но Ваш вариант  - действительно через задницу... smile


--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 14.8.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



GrayCardinal, Второй вариант мне больше нравиться. Но в манах не сказано как себя поведет второй процесс, будет ждать разблокировки или завершится с ошибкой.


Lazin, А вы любитель поизвращаться smile 

Это сообщение отредактировал(а) andrew_121 - 14.8.2009, 11:55


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 14.8.2009, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(GrayCardinal @  14.8.2009,  10:48 Найти цитируемый пост)
Извините, но Ваш вариант  - действительно через задницу...

извиняю, но я же написал, что
Цитата(Lazin @  14.8.2009,  08:34 Найти цитируемый пост)
там должен быть свой аналог LockFile(Ex)

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


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



andrew_121, 
По дефолту - будет ждать разблокировки...

Это сообщение отредактировал(а) GrayCardinal - 14.8.2009, 12:20


--------------------
PM MAIL WWW   Вверх
andrew_121
Дата 14.8.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



GrayCardinal, Понял. Спасибо!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
GrayCardinal
Дата 14.8.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

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



andrew_121, 
Завсегда пожалуйста  smile 


--------------------
PM MAIL WWW   Вверх
Loki
Дата 14.8.2009, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



p.s. может не в тему, но зачем вам эти сложности с чайлдами и парентами? может просто poll юзать?
или нужны разные секурити ливлы?
PM MAIL   Вверх
MAKCim
Дата 14.8.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Lazin @  14.8.2009,  08:34 Найти цитируемый пост)
мне одному кажется, что это равносильно удалению гланд через задницу?

все не так страшно ;)
Код

void *addr = mmap(NULL, (sizeof(int) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
pthread_mutex_t *mutex = addr;
pthread_mutex_init(mutex, NULL);



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



MAKCim, а что этот код делает? Мьютекс? так он без имени. Как его использовать?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
MAKCim
Дата 15.8.2009, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(andrew_121 @  14.8.2009,  20:35 Найти цитируемый пост)
а что этот код делает?


Цитата(Lazin @  14.8.2009,  08:34 Найти цитируемый пост)
а в linux, нужно создать именованную разделяемую память, в ней создать мьютекс(мне одному кажется, что это равносильно удалению гланд через задницу?), и далее действовать так, как описано выше




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

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

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

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


 




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


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

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