Signatur
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
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();
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();
// 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.