Во-первых, Я делаю кодирование в очередях сообщений. какая польза от ftoK ()
а создание ключей? для чего нужен ключ? Прочтите страницу руководства ftok
там написано
key_t ftok(const char *pathname, int proj_id);
Функция ftok () использует идентификатор файла с именем данного
путь (который должен ссылаться на
существующий доступный файл), а сегодня proj_id является целым числом, но используется только 8 бит. Типичное использование имеет символ ASCII
proj_id, поэтому поведение называется неопределенным, когда proj_id равен нулю.
ftok
требует, чтобы существовал file
, поскольку он использует inode information
этого файла для создания key
.
Во-вторых, что означает этот ключ "(key_t) 1234"? проверить первый аргумент msgget()
, он типа key_t
и 1234
не типа key_t
, это целое число, поэтому вы вводите его типом key_t
.
В вашем коде вы не создали key
с помощью ftok()
, вы можете создать его как.
key_t key;
key = ftok("file.c", 'b'));/*instead of taking random 1234, you are generating key from file based on proj_id */
msgid=msgget(key_t, 0666 | IPC_CREAT);
Для чего нужен ключ? key
является одним из идентификаторов для идентификации очереди сообщений в ядре, кроме message queue id
. Запустите ipcs -q
в командной строке и проверьте.
Смотрите это Какова цель ftok в очередях сообщений