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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
#1

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

22.12.2013, 08:04. Просмотров 702. Ответов 6
Метки нет (Все метки)

У функции 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++
int compare (Zakaz* arg1,Zakaz * arg2) .... qsort (p, 3, sizeof (Zakaz),(int (*)(void *, void *))compare); Объясните,...

Параметр конструктора - C++
Ребята, помогите. Как создать конструктор, который принимает символ в качестве параметра? Заранее благодарен.

Const параметр - C++
зачем пишут class Sm{ public: Sm(const Sm&){}; // same with operator@ }; если ссылка и так константа. достаточно Sm&. или я...

Обмануть 1 параметр - C++
Всем привет! Столкнулся с нестандартной проблемой. Написал программу test.exe, которая должна запускать другую программу с 1 параметром,...

Параметр функции - C++
Задаюсь вопросом для чего это нужно. const string &Function(int &i; int &j) { //код функции. } Адрес у i и j, это понятно...

Параметр функции [out] - C++
Добрый вечер. Возникла такая проблема. Есть функция, ее нужно протестировать. Судя по описанию, у нее 3 входных параметра, это матрица,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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++
Напишите код функции, с одним формальным параметром x, которая предназначена для вычисления 1/x. Параметр передается по ссылке. Приведите...

параметр, процедуры - C++
Доброго времени суток, помогите с решением задач: Param8. Описать процедуру RemoveX(A, N, X), удаляющую из целочисленного массива A...

Параметр в экземпляре класса - C++
Добрый день всем. имеется обрывок класса template <class TKey, class TStoredData> class FixedCache { public: enum...

Выходной параметр функции - C++
Прошу прощения за глупый вопрос:) но не понимаю почему к примеру в коде void getline(char s, int lim) { int c,i; for(i=0;i<lim-1...


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

Или воспользуйтесь поиском по форуму:
танкист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
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru