| Zeile 37: | Zeile 37: | ||
* Im root-Prozess wird service_is_symlink("/dev/null", …) aufgerufen. Dieser findet „/dev“ in einer Liste von „Mountpoints“ und stellt fest, dass dies ein Symlink auf „(devfs)/null“ ist. | * Im root-Prozess wird service_is_symlink("/dev/null", …) aufgerufen. Dieser findet „/dev“ in einer Liste von „Mountpoints“ und stellt fest, dass dies ein Symlink auf „(devfs)/null“ ist. | ||
* Im Aufrufer wird rekursiv create_pipe("(devfs)/null", …) aufgerufen. | * Im Aufrufer wird rekursiv create_pipe("(devfs)/null", …) aufgerufen. | ||
| − | * Im devfs-Prozess wird service_create_pipe("/null", …) aufgerufen. | + | * Im devfs-Prozess wird service_create_pipe("/null", …) aufgerufen. Auch hier existiert die Datei nicht direkt, also wird 0 zurückgegeben. |
| − | * Im Aufrufer speichert create_pipe diese ID zusammen mit der Prozess-ID von | + | * Auch hier überprüft der Aufrufer wieder, ob die Datei ein Symlink ist. |
| + | * Im devfs-Prozess wird service_is_symlink("/null", …) aufgerufen. Tatsächlich ist auch dies wieder ein Symlink, und zwar auf „(thingamabob)/null“. | ||
| + | * Im Aufrufer wird wieder rekursiv create_pipe("(thingamabob)/null", …) aufgerufen. | ||
| + | * Im thingamabob-Prozess wird service_create_pipe("/null", …) aufgerufen, diesmal existiert die Datei und es wird eine ID ungleich 0 zurückgegeben. | ||
| + | * Im Aufrufer speichert create_pipe diese ID zusammen mit der Prozess-ID von thingamabob in einem Array und gibt den Index des Eintrags als Pipe-ID zurück. | ||
Die Symlinkimplementierung ist vielleicht nicht die schönste ihrer Art, aber zumindest funktioniert sie soweit. | Die Symlinkimplementierung ist vielleicht nicht die schönste ihrer Art, aber zumindest funktioniert sie soweit. | ||