Конечно же можешь. Я же наверху пример написал, как это делать. Когда указатель(а точнее его значение) послан в очередь, значение указателя будет переписано в переменную внутри очереди. Но в то же время ты можешь менять память через указатель.
Данные нельзя изменить если операционка поддерживает ММУ (мемору манаджемент юнит) - зашишает память процесса от изменения другим процессом. Но юкос мму не поддерживает .
Насчет твоего примера - можешь команды через указатели посылать а можешь и у себя буфер создать а указатель к буферу посылать через очередь - тогда не надо будет посылать сами команды через очередь . Но это нехорошая практика - ты же не знаешь прочитал ли процесс куда ты отправил команду позицию буфера или нет . В этом случае можно использовать сдвоенный семафор - один на передачу команды друго на ее чтение . Но это усложняет программу.
Я у себя по другому делаю - создаю необзодимое количество буферов , и создаю функцию для контроля ими - типа маллок фрее . когда мне нужно послать команду или что то в этом роде - я схватываю пустой буфер посредством маллок, посылаю его в очередь . На другой стороне когда этот буффер прочитывается приемным процессом , после обработки команды , буффер высвобождается через фрее. Но я Цшные функции маллок не использую - они очень медленные а создаю single linked list так что вец процесс по буферам занимает очень коротокое время .
--------------------
Зачем лаять на караван , когда на него можно плюнуть?
|