a745c072

Findkey


Функция findkey находит очередь сообщений с данным ключом от имени функции sys_msgget (вызов находится в строке ).

Начинается цикл по всем слотам, которые могут заняты в msgque. Значение max_msqid позволяет отслеживать наивысший занятый элемент массива в msgque; оно используется здесь и сопровождается с помощью функций newque и freeque, которые вскоре будут рассмотрены. Без параметра max_msqid пришлось бы проходить в этом цикле по всем MSGMNI (128) элементам msgque, даже если, скажем, используются первые5.

Если текущий элемент массива имеет значение IPC_NOID, то здесь создается очередь сообщений. Очередь сообщений может иметь искомый ключ, поэтому функция findkey ожидает полного создания очереди. (Она может перейти в это состояние, когда вызов функции kmalloc в строке переводит процесс в состояние ожидания.)

Если данный вход msgque не используется, ясно, что он не будет иметь соответствующего ключа.

Если совпадающий ключ найден, будет возвращен соответствующий индекс массива.

Если цикл был выполнен до конца и не найден соответствующий ключ, возвращается –1 в качестве сигнала об отказе.



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