Форум программистов, компьютерный форум CyberForum.ru

Параметр shmget - C++

Восстановить пароль Регистрация
 
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
22.12.2013, 08:04     Параметр shmget #1
У функции shmget три параметра. С первыми двумя всё понятно, а вот третий параметр
мне не совсем понятен.
Вот прототип ф-ии:
C++
1
2
3
4
shm_id shmget (
key_t key, /* ключ к сегменту */
int size, /* размер сегмента */
int shmflg ); /*флаг создания/использования */
У сервера(родтельского процесса) я указал
C++
1
shmget(key, SIZE, [B]IPC_CREAT|0666[/B]);
а какой флаг надо поставить у клиента (в дочернем процессе), если необходимо только прочитать данные, расположенные в данном сегменте?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2013, 08:04     Параметр shmget
Посмотрите здесь:

C++ Параметр
C++ параметр, процедуры
Формальный параметр C++
C++ Параметр конструктора
Параметр функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
22.12.2013, 08:10     Параметр shmget #2
танкист34,
IPC_CREAT to create a new segment. If this flag is not used, then
shmget() will find the segment associated with key and
check to see if the user has permission to access the
segment.
т.е, как я понимаю, не нужно никаких IPC_ ставить и тогда по получит доступ
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
22.12.2013, 08:11  [ТС]     Параметр shmget #3
Цитата Сообщение от nexen Посмотреть сообщение
т.е, как я понимаю, не нужно никаких IPC_ ставить и тогда по получит доступ
пробывал просто 0 ставить пишет, что "shmget: No such file or directory"
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
22.12.2013, 09:14     Параметр shmget #4
танкист34, глянул щас свой код. Во всех трех процессах стоит:
C++
1
shmid = shmget(MSG_KEY, 3 * sizeof(int), IPC_CREAT | 0666) ;
Так что такое сочетание, похоже, и открывает на чтение и создает. Главное ключ одинаковый указать



Или вот:
IPC_CREAT | 0666 for a server (i.e., creating and granting read and write access to the server)
0666 for any client (i.e., granting read and write access to the client)
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
22.12.2013, 09:18  [ТС]     Параметр shmget #5
nexen, я так тоже ставил, но дело в том, что вывести потом с сегмента ничего не получается так как он просто напросто опусташается.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
22.12.2013, 09:21     Параметр shmget #6
танкист34, ну тогда показывайте код. У меня ж работало.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2013, 13:16     Параметр shmget
Еще ссылки по теме:

Необязательный параметр функции C++
C++ Изменить параметр класса
Обмануть 1 параметр C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
22.12.2013, 13:16  [ТС]     Параметр shmget #7
вот так я записываю в сегмент: (в родительском процессе)
C++
1
2
3
4
5
6
7
8
ptr = (char*)shmat(shmid, 0, 0);
    s = ptr;
    time_start(); //начало замера времени
    for(int i = 0; i < SIZE; i++)
    {
        *s = '1';
        s++;
    }
потом отсоединяю сегмент и удаляю
C++
1
2
shmdt(ptr);
    shmctl(shmid, IPC_RMID, 0);
а в дочернем пытаюсь прочитать
C++
1
2
3
4
5
6
7
8
9
shmid2 = shmget(key, SIZE, IPC_CREAT | 0666);
ptr = (char*)shmat(shmid2, 0, 0); //присоединение сегмента
        s = ptr;
        for(int i = 0; i < SIZE; i++)
        {
           buffer[i] = *s;
           s++;     
           std::cout << buffer[i] << std::endl;
        }
переменные shmid2 и shmid типа int. пробывал через одну, но результат такой же.
может я неправильно организовал запись?

Добавлено через 3 часа 42 минуты
тема актуальна
Yandex
Объявления
22.12.2013, 13:16     Параметр shmget
Ответ Создать тему
Опции темы

Текущее время: 15:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru