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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> куда в ubuntu дели поля msg_first/last из msqid_ds 
:(
    Опции темы
abskura
  Дата 13.9.2010, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



проблема такая, в заголовочном файле /sys/msg.h в FreBSD 8.0 содержится, по мимо прочего, информация о структуре msqid_ds, и выглядит эта структура следующим образом:
Код

 struct msqid_ds {
    struct ipc_perm    msg_perm;       /* opйration permission struct */
    struct __msg       *msg_first;     /* ptr to first message on q */
    struct __msg       *msg_last;      /* ptr to last message on q */
    msgqnum_t msg_qnum;       /* # of messages on q */
    msglen_t msg_qbytes;     /* max # of bytes on q */
    msglen_t msg_cbytes   /* # of bytes in use on the queue */
    pid_t              msg_lspid;      /* pid of last msgsnd */
    pid_t              msg_lrpid;      /* pid of last msgrcv */
    time_t             msg_stime;      /* last msgsnd time */
    time_t             msg_rtime;      /* last msgrcv time */
    time_t             msg_ctime;      /* last change time */
   };


Этаже структура в Ubuntu 10.04 определена в заголовочном файле /bits/msq.h и выглядит следующим образом:
Код

struct msqid_ds
{
  struct ipc_perm msg_perm;    /* structure describing operation permission */
  __time_t msg_stime;        /* time of last msgsnd command */
#if __WORDSIZE == 32
  unsigned long int __unused1;
#endif
  __time_t msg_rtime;        /* time of last msgrcv command */
#if __WORDSIZE == 32
  unsigned long int __unused2;
#endif
  __time_t msg_ctime;        /* time of last change */
#if __WORDSIZE == 32
  unsigned long int __unused3;
#endif
  unsigned long int __msg_cbytes; /* current number of bytes on queue */
  msgqnum_t msg_qnum;        /* number of messages currently on queue */
  msglen_t msg_qbytes;        /* max number of bytes allowed on queue */
  __pid_t msg_lspid;        /* pid of last msgsnd() */
  __pid_t msg_lrpid;        /* pid of last msgrcv() */
  unsigned long int __unused4;
  unsigned long int __unused5;
};

 
нет полей *msg_first и *msg_last, которые указывают на первое и последенее сообщение в очереди, соответственно, точнее на информацию о них, которая хранится в структуре strut msg
Код

struct msg
{
   struct msg *msg_next;
   long msg_type;
   char *msg_spot;
   short msg_ts;
};


Из которой мне нужно значение msg_ts, в нем содержится размер текста конкретного сообщения. 

Вопрос: как быть-то? Ответ "компилировать в FreBSD", - не предлогать, суть в том, что бы программа компилилась и в  Ubuntu  и в FreBSD.
PM MAIL   Вверх
boostcoder
Дата 13.9.2010, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



все правильно. фря это не линукс. и на оборот.
в доке сказано, что в линукс, эта структура, должна содержать как минимум следующие поля:
Код

struct msqid_ds {
   struct ipc_perm msg_perm;
   msgqnum_t msg_qnum;
   msglen_t msg_qbytes;
   pid_t msg_lspid;
   pid_t msg_lrpid;
   time_t msg_stime;
   time_t msg_rtime;
   time_t msg_ctime;
};

остальное по желанию.

Это сообщение отредактировал(а) boostcoder - 13.9.2010, 19:06
PM WWW   Вверх
abskura
Дата 13.9.2010, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(boostcoder @ 13.9.2010,  19:05)
остальное по желанию.

Эм, а можно чуть подробнее, как вот это мое желание осуществить? Как в эту структуру добавить нужное поле? Не править же на каждом компьютере заголовочный файл.
Или иначе, где в линуксе взять нужное мне значение msg_ts? Сам я что-то не врублюсь.

UPD: ну или как иначе можно определить размер конкретного сообщения в очереди сообщений? Может есть у кого мысли?

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

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

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


 




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


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

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