Читаем UNIX Network Programming. Volume 2 Second Edition. Interprocess Communications полностью

Вторая часть функции mq_open приведена в листинге 5.18. Она завершает инициализацию новой очереди сообщений.

Листинг 5.18. Вторая часть функции mq_open: инициализация новой очереди

//my_pxmsg_mmap/mq_open.с

51    /* вычисление и установка размера файла */

52    msgsize = MSGSIZE(attr-mq_msgsize);

53    filesize = sizeof(struct mymq_hdr) + (attr-mq_maxmsg *

54     (sizeof(struct mymsg_hdr) + msgsize));

55    if (lseek(fd, filesize – 1, SEEK_SET) == –1)

56     goto err;

57    if (write(fd, "", 1) == –1)

58     goto err;

59    /* отображение файла в память */

60    mptr = mmap(NULL, filesize, PROT_READ | PROT_WRITE,

61     MAP_SHARED, fd, 0);

62    if (mptr == MAP_FAILED)

63     goto err;

64    /* выделение структуры mymq_info{} для очереди */

65    if ((mqinfo = mallос (sizeof (struct mymq_info))) == NULL)

66     goto err;

67    mqinfo-mqi_hdr = mqhdr = (struct mymq_hdr *) mptr;

68    mqinfo-mqi_magic = MQI_MAGIC;

69    mqinfo-mqi_flags = nonblock;

70    /* инициализация заголовка в начале файла */

71    /* создание списка пустых сообщений */

72    mqhdr-mqh_attr.mq_flags = 0;

73    mqhdr-mqh_attr.mq_maxmsg = attr-mq_maxmsg;

74    mqhdr-mqh_attr.mq_msgsize = attr-mq_msgsize;

75    mqhdr-mqh_attr.mq_curmsgs = 0;

76    mqhdr-mqh_nwait = 0;

77    mqhdr-mqh_pid = 0;

78    mqhdr-mqh_head = 0;

79    index = sizeof(struct mymq_hdr);

80    mqhdr-mqh_free = index;

81    for (i = 0; i attr-mq_maxmsg – 1; i++) {

82     msghdr = (struct mymsg_hdr *) mptr[index];

83     index += sizeof(struct mymsg_hdr) + msgsize;

84     msghdr-msg_next = index;

85    }

86    msghdr = (struct mymsg_hdr *) mptr[index];

87    msghdr-msg_next = 0; /* конец списка пустых сообщений */

88    /* инициализация взаимного исключения и условной переменной */

89    if ((i = pthread_mutexattr_init(mattr)) != 0)

90     goto pthreaderr;

91    pthread_mutexattr_setpshared(mattr, PTHREAD_PROCESS_SHARED);

92    i = pthread_mutex_init(mqhdr-mqh_lock, mattr);

93    pthread_mutexattr_destroy(mattr); /* обязательно нужно удалить */

94    if (i != 0)

95     goto pthreaderr:

96    if ((i = pthread_condattr_init(cattr)) != 0)

97     goto pthreaderr;

98    pthread_condattr_setpshared(cattr, PTHREAD_PROCESS_SHARED);

99    i = pthread_cond_init(mqhdr-mqh_wait, cattr);

100   pthread_condattr_destroy(cattr); /* обязательно нужно удалить */

101   if (i != 0)

102    goto pthreaderr;

103   /* инициализация завершена, снимаем бит user-execute */

104   if (fchmod(fd, mode) == –1)

105    goto err;

106   close(fd);

107   return((mymqd_t) mqinfo);

108  }

Установка размера файла
Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT