Aby otrzymać unikalne ID musimy posłużyć się kluczem. Klucz musi zostać uzgodniony przez procesy klienta i serwera. Jest to pierwszy krok przy tworzeniu aplikacji klient/serwer.
Kiedy używasz telefonu: aby dodzwonić się do kogoś musisz znać jego numer. Dodatkowo, operator telefoniczny musi wiedzieć w jaki sposób połączyć ciebie. Kiedy ta osoba odbiera tworzone jest połączenie.
W wypadku IPC Systemu V 'telefon' odpowiada bezpośrednio typowi używanego obiektu. 'Operator telefoniczny', lub metoda połączenia może być przyporządkowana kluczowi IPC.
Klucz może być za każdym razem ten sam, zakodowany w aplikacji. Jednak ma to swoją wadę - istnieje możliwość, iż jest on już używany. Często korzysta się z funkcji ftok() w celu utworzenia wartości klucza, który ma być użyty przez klienta i serwer.
FUNKCJA Z BIBLIOTEKI: ftok();
PROTOTYP: key_t ftok ( char *ścieżka, char proj );
ZWRACA: nową wartość klucza IPC jeżeli sukces
-1 - błąd, wartość errno odpowiada wywołaniu stat()
Zwracaną wartością jest klucz utworzony na podstawie kombinacji numeru i-węzła i podrzędnego numeru urządzenia z pliku podanego w pierwszym argumencie wraz z identyfikatorem projektu podanym jako drugi argument. To nie gwarantuje unikalności, jednak aplikacja może sprawdzić czy nie zachodzi kolizja i powtórzyć generację klucza.
key_t mójklucz;
mójklucz = ftok("/tmp/mojaapp", 'a');
W powyższym przykładzie klucz tworzony jest z kombinacji katalogu /tmp/mojaapp z literą 'a'. Inną możliwością jest użycie bierzącego katalogu:
key_t mójklucz;
mykey = ftok(".", 'a');
Algorytm generacji klucza jest całkowicie zależny od programisty. Do póty, do póki nie dopuszcza się do przypadku wyścigu, powieszenia (deadlocks) procesu każda metoda jest dobra. W celu demonstracyjnym używamy ftok() zakładamy, że każdy klient posiada unikalny katalog 'domowy', a to powinno dać nam wystarczające klucze.
Choć wartość klucza jest odbierana, używana jest w póżniejszych wywołaniach systemowych w celu tworzenia lub dostępu do obiektów IPC.