Definition | #include <stropts.h> int fattach (int fildes, const char *path); |
Beschreibung | Die Funktion fattach() ordnet einem Objekt (Datei oder Dateiverzeichnis) im Namensraum des Dateisystems einen Dateideskriptor unter STREAMS zu, wobei fildes ein Pfadname zugeordnet wird. fildes muss ein gültiger, offener Dateideskriptor sein, der eine STREAMS-Datei repräsentiert. path ist ein Pfadname eines existierenden Objekts, dessen Eigentümer mit Schreiberlaubnis der Benutzer sein muss. Alternativ dazu kann der Benutzer auch besondere Rechte besitzen. Alle nachfolgenden Operationen auf path arbeiten mit der STREAMS-Datei, solange, bis die Zuordnung der STREAMS-Datei zum Knoten aufgehoben wird. fildes kann mehr als einem Pfad zugeordnet sein, d. h. dem Dateideskriptor können mehrere Namen zugeordnet sein. Die Attribute des benannten Streams werden folgendermaßen initialisiert (siehe auch stat() ): Zugriffsrechte, Benutzer- und Gruppennummern sowie die Dateizeiten werden gleich denen von path, die Anzahl der Verweise wird gleich 1 und Größe und Geräte-Identifikation werden gleich den Werten gesetzt, die das STREAMS-Gerät zu fildes besitzt. Werden irgendwelche Attribute des benannten Streams anschließend geändert (z. B. mit chmod() ), dann werden weder die Attribute des zu Grunde liegenden Objekts noch die Attribute der STREAMS-Datei, auf die sich fildes bezieht, davon beeinflusst. Dateideskriptoren, die sich auf das zu Grunde liegende Objekt beziehen und noch vor einem Aufruf von fattach() geöffnet wurden, beziehen sich weiterhin auf das zu Grunde liegende Objekt. |
Returnwert | 0 | bei Erfolg. |
| -1 | bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. |
Fehler | fattach() schlägt fehl, wenn gilt:
|
| EACCES
| Eine Komponente des Pfades darf nicht durchsucht werden, oder der Benutzer ist der Eigentümer von path, besitzt jedoch keine Schreiberlaubnis für path. |
| EBADF
| fildes ist kein gültiger, offener Dateideskriptor. |
| ENOENT
| Eine Komponente des Pfadnamens existiert nicht, oder path zeigt auf eine leere Zeichenkette. |
| ENOTDIR
| Eine Komponente des Pfadnamen-Präfix ist kein Dateiverzeichnis. |
| EPERM
| Die effektive Benutzernummer des Prozesses ist nicht die des Eigentümers der mit path bezeichneten Datei und der Prozess hat nicht die entsprechenden Zugriffsrechte. |
| EBUSY
| path ist derzeit ein Einhängpunkt oder diesem Pfad ist eine STREAMS-Datei zugeordnet. |
| ENAMETOOLONG
|
|
| Die Länge von path überschreitet {PATH_MAX} , oder eine Komponente des Pfadnamens ist länger als {NAME_MAX} , während {_POSIX_NO_TRUNC} aktiv ist; oder Die Auflösung eines symbolischen Verweises des Pfadnamens erzeugt ein Zwischenergebnis, das länger ist als {PATH_MAX} . |
| ELOOP
| Bei der Übersetzung von path traten zu viele symbolische Verweise auf. |
| EINVAL
| fildes repräsentiert keine STREAMS-Datei. |
| EREMOTE
| path ist eine Datei in einem von fern eingehängten Dateiverzeichnis. |
Hinweise | fattach() verhält sich ähnlich wie die ältere Funktion mount() , derart dass ein Objekt vorübergehend durch das Root-Verzeichnis des eingehängten Dateisystems ersetzt wird. Bei fattach() muss das ersetzte Objekt kein Verzeichnis sein und die ersetzende Datei ist eine STREAMS-Datei.
|
Siehe auch | fdetach() , isastream() , stropts.h .
|