Какой смысл иметь key_t, если ключом для доступа к разделяемой памяти будет возвращаемое значение shmget ()?

Зачем нам нужно создавать ключ

key_t ftok(const char *path, int id);

в следующем фрагменте кода при использовании разделяемой памяти?

key_t key;
int shmid;

key = ftok("/home/beej/somefile3", 'R');
shmid = shmget(key, 1024, 0644 | IPC_CREAT);

Насколько я понял, что необходимо для доступа к данной разделяемой памяти это шмид , а не ключ. Или я не прав? Если нам нужен shmid , какой смысл не просто создавать каждый раз случайный ключ?

Править

@ Руководство Beej по Unix IPC можно прочитать :

Как насчет этой ключевой чуши? Как делать мы создаем? Ну, так как тип key_t на самом деле просто long , вы можете используйте любой номер, который хотите. А вдруг вы жестко кодируете номер, а некоторые другая несвязанная программа жестко кодирует тот же номер, но нужна другая очередь? Решение - использовать ftok () функция, которая генерирует ключ из два аргумента.

Читая это, у меня создается впечатление, что то, что нужно присоединить к блоку разделяемой памяти, является ключом. Но это неправда, не так ли?

13
задан Bruno Parmentier 26 August 2015 в 09:38
поделиться