Start · Sprachen · PHP · Referenz · eio_mknod

eio_mknod

Funktion

Erstellt asynchron eine besondere oder gewöhnliche Datei (z. B. Gerätedatei) über die POSIX-Funktion <code>mknod(2)</code>.

seit PHP 0.0.1 Kategorie: io

Signatur

eio_mknod(string $path, int $mode, int $dev, int $pri = EIO_PRI_DEFAULT, callable $callback = null, mixed $data = null): resource|false

Beschreibung

eio_mknod() ist Teil der eio-Extension und ermöglicht das asynchrone Erstellen von Dateien mithilfe der zugrundeliegenden POSIX-Systemfunktion mknod(2). Damit lassen sich nicht nur gewöhnliche Dateien, sondern auch Gerätedateien (Block- und Zeichengeräte), FIFOs und symbolische Links erstellen, ohne den PHP-Prozess zu blockieren.

Der Parameter mode legt sowohl den Dateityp als auch die Zugriffsrechte fest. Er wird typischerweise aus den Konstanten EIO_S_IFREG (normale Datei), EIO_S_IFBLK (Block-Gerät), EIO_S_IFCHR (Zeichen-Gerät) oder EIO_S_IFIFO (FIFO) kombiniert mit oktalen Zugriffsrechten zusammengesetzt. Für Gerätedateien gibt dev die Major- und Minor-Gerätenummer an; für andere Dateitypen sollte dieser Wert 0 sein.

Die Funktion gibt sofort eine Ressource zurück und führt die Operation im Hintergrund aus. Das angegebene callback wird aufgerufen, sobald die Operation abgeschlossen ist. Dieses Callback erhält die Parameter $data, $result (0 bei Erfolg, -1 bei Fehler) sowie $req (die Request-Ressource). Der Rückgabewert $result entspricht dem Rückgabewert des mknod-Systemaufrufs.

Achtung: Das Erstellen von Gerätedateien erfordert in der Regel Root-Rechte oder entsprechende Capabilities. eio_mknod() sollte nur in Umgebungen verwendet werden, in denen die eio-Extension verfügbar und die Ereignisschleife (z. B. via eio_event_loop()) aktiv ist.

Parameter

Name Typ Default Beschreibung
$path Pflicht string Pfad der zu erstellenden Datei oder des zu erstellenden Geräteknotens.
$mode Pflicht int Kombination aus Dateityp-Konstante (z. B. EIO_S_IFREG, EIO_S_IFBLK, EIO_S_IFCHR, EIO_S_IFIFO) und oktalen Zugriffsrechten (z. B. 0644).
$dev Pflicht int Gerätenummer (Major/Minor) für Block- oder Zeichengeräte, zusammengesetzt z. B. mit makedev(). Für normale Dateien und FIFOs den Wert 0 übergeben.
$pri int EIO_PRI_DEFAULT Priorität des Requests. Mögliche Werte: EIO_PRI_MIN, EIO_PRI_DEFAULT, EIO_PRI_MAX.
$callback callable null Callback-Funktion, die nach Abschluss der Operation aufgerufen wird. Signatur: function(mixed $data, int $result, resource $req): void. $result ist 0 bei Erfolg, -1 bei Fehler.
$data mixed null Beliebige Benutzerdaten, die unverändert an das Callback weitergegeben werden.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine eio-Request-Ressource zurück, die z. B. mit eio_cancel() abgebrochen werden kann. Bei einem Fehler wird false zurückgegeben.

Beispiele

Erstellen einer gewöhnlichen Datei mit eio_mknod

<?php
// eio-Extension muss geladen sein

eio_mknod(
    '/tmp/test_eio.txt',
    EIO_S_IFREG | 0644,
    0,
    EIO_PRI_DEFAULT,
    function ($data, $result, $req) {
        if ($result === 0) {
            echo "Datei erfolgreich erstellt: " . $data . PHP_EOL;
        } else {
            echo "Fehler beim Erstellen der Datei (Fehlercode: " . $result . ")" . PHP_EOL;
        }
    },
    '/tmp/test_eio.txt'
);

eio_event_loop();
Datei erfolgreich erstellt: /tmp/test_eio.txt

Erstellen einer FIFO-Datei (Named Pipe)

<?php
// Erstellt eine Named Pipe (FIFO) unter /tmp/my_fifo

$path = '/tmp/my_fifo';

eio_mknod(
    $path,
    EIO_S_IFIFO | 0600,
    0,
    EIO_PRI_DEFAULT,
    function ($data, $result, $req) use ($path) {
        if ($result === 0) {
            echo "FIFO erstellt: " . $path . PHP_EOL;
            // Aufräumen
            unlink($path);
        } else {
            $errno = eio_get_last_error($req);
            echo "Fehler beim Erstellen der FIFO: " . $errno . PHP_EOL;
        }
    }
);

eio_event_loop();
FIFO erstellt: /tmp/my_fifo

// Wichtig · Fallstricke

Berechtigungen: Das Erstellen von Block- (EIO_S_IFBLK) und Zeichengeräten (EIO_S_IFCHR) erfordert unter Linux Root-Rechte oder die Capability CAP_MKNOD. Ohne diese Rechte schlägt der Systemaufruf mit EPERM fehl.

Umask: Die tatsächlich gesetzten Dateiberechtigungen werden durch die aktuelle umask des Prozesses beeinflusst, analog zu chmod()-Aufrufen.

Abhängigkeit: eio_mknod() ist nur verfügbar, wenn die PECL-Extension eio installiert und geladen ist. Ohne aktive Ereignisschleife (eio_event_loop() oder Integration in eine Event-Library wie libevent) werden Callbacks nicht ausgeführt.

Portabilität: Das Verhalten von mknod für bestimmte Dateitypen ist betriebssystemabhängig. Unter macOS und einigen BSD-Systemen gelten abweichende Einschränkungen.