|
UNIX: взаимодействие процессовФункция mq_open В листинге 5.17 приведен текст первой части функции mq_open, создающей новую очередь сообщений или открывающей существующую. Листинг 5.17. Функция mq_open: первая часть //my_pxmsg._mmap/mq_open. с 1 #include "unpipc.h" 2 #include "mqueue.h" 3 #include <stdarg. Если флаг указан, третий аргумент имеет тип mode_t, а это простой системный тип, являющийся одним из целых типов. При этом мы столкнемся с проблемой в BSD/OS, где этот тип данных определен как unsigned short (16 бит). Поскольку целое в этой реализации занимает 32 бита, компилятор С увеличивает аргумент этого типа с 16 до 32 бит, потому что все короткие целые в списке аргументов увеличиваются до обычных целых. Но если мы укажем mode_t при вызове va_arg, он пропустит 16 бит аргумента в стеке, если этот аргумент был увеличен до 32 бит. Следовательно, мы должны определить свой собственный тип данных, va_mode_t, который будет целым в BSD/OS и типом mode_t в других системах. Эту проблему с переносимостью решают приведенные ниже строки нашего заголовка unpipc.h (листинг В.1): #ifdef __bsdi__ #define va_mode_t int #else #define va_mode_t mode_t #endif 30 Мы сбрасываем бит user-execute (S_IXUSR) в переменной mode по причинам, которые будут вскоре раскрыты ...» | Код для вставки книги в блог HTML
phpBB
текст
|
|