2 Stimmen

Beim Erstellen einer POSIX-Nachrichtenwarteschlange müssen die Namen mit einem Schrägstrich versehen sein.

Gibt es einen bestimmten Grund, warum POSIX-Nachrichtenschlangen erfordern, dass der Name mit einem '/' vorangestellt wird?

Zum Beispiel, wenn Sie versuchen würden, eine Nachrichtenschlange mit dem Namen "thequeue" zu öffnen, müssten Sie folgendes verwenden:

mq_open("/thequeue", O_RDONLY);

1voto

Duck Punkte 25886

Es sind nicht nur Nachrichtenwarteschlangen, sondern alle POSIX-IPC einschließlich Semaphore und Shared Memory. Wenn man es auf etwas zurückführen muss, dann wären es die üblichen Unix-historischen Implementierungsunterschiede, die durch das eigene Bestreben von POSIX, Dinge zu vereinen, verstärkt wurden, was in diesem Fall mehr oder weniger gescheitert ist.

Richard Stevens widmet diesem Thema einen kleinen Abschnitt in Unix Network Programming Vol II. Ich habe diese Seiten wahrscheinlich im Laufe der Jahre ein halbes Dutzend Mal gelesen und ich denke immer noch nicht, dass ich angemessen zusammenfassen kann, was er zu sagen versucht. Was er jedoch eindeutig feststellt, ist dass POSIX.1 gesagt hat:

  • Der Name muss existing rules for pathname entsprechen

  • Wenn der Name mit einem Schrägstrich beginnt, dann beziehen sich verschiedene Aufrufe alle auf dasselbe IPC-Objekt. Wenn der Name nicht mit einem Schrägstrich beginnt, ist das Ergebnis implementationsabhängig.

  • Die Implementierung zusätzlicher Schrägstriche im Namen ist implementationsabhängig.

In den aktuellen POSIX-Dokumenten für sem_open, mq_open und shm_open werden alle folgenden Beschränkungen aufgelistet:

  1. Es ist nicht festgelegt, ob der Name im Dateisystem erscheint und von anderen Funktionen sichtbar ist, die Pfadnamen als Argumente akzeptieren.

  2. Das Name-Argument entspricht den Konstruktionsregeln für einen Pfadnamen, außer dass

    a)die Interpretation von Schrägstrichzeichen außer dem führenden Schrägstrichzeichen im Namen implementationsabhängig ist

    b) die Längenbeschränkungen für das Name-Argument implementationsabhängig sind und nicht mit den Gleichen wie die Pfadnamenbeschränkungen PATH_MAX und NAME_MAX sein müssen

    c) Wenn der Name mit dem Schrägstrichzeichen beginnt, dann beziehen sich Prozesse, die diese Funktionen mit demselben Wert des Namens aufrufen, solange auf dasselbe IPC-Objekt, wie lange dieser Name nicht entfernt wurde. Wenn der Name nicht mit dem Schrägstrichzeichen beginnt, ist die Wirkung implementationsabhängig.

Anders gesagt, bleiben die Dinge mehr oder weniger so, wie Stevens es beschrieben hat.

All dies scheint sehr langatmig zu sein, um jedoch unbefriedigend zu sagen, dass Sie den Namen mit einem Schrägstrich beginnen müssen und keine anderen Schrägstriche im Namen verwenden dürfen, da Sie sonst in einen implementationsabhängigen Bereich gelangen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X