Основы операционных систем. Практикум

       

Модификация предыдущего примера для передачи числовой информации


В описании системных вызовов msgsnd() и msgrcv() говорится о том, что передаваемая информации не обязательно должна представлять собой текст.

Мы можем воспользоваться очередями сообщений для передачи данных любого вида. При передаче разнородной информации целесообразно информативную часть объединять внутри сообщения в отдельную структуру:

struct mymsgbuf { long mtype; struct { short sinfo; float finfo; } info; } mybuf;

для правильного вычисления длины информативной части. В некоторых вычислительных системах числовые данные размещаются в памяти с выравниванием на определенные адреса (например, на адреса, кратные 4). Поэтому реальный размер памяти, необходимой для размещения нескольких числовых данных, может оказаться больше суммы длин этих данных, т. е. в нашем случае

sizeof(info)>=sizeof(short)+sizeof(float)

Для полной передачи информативной части сообщения в качестве длины нужно указывать не сумму длин полей, а полную длину структуры. Модифицируйте предыдущие программы 09-1a.c и 09-1b.c из раздела "Прогон примера с однонаправленной передачей текстовой информации" для передачи нетекстовых сообщений.



Содержание раздела