home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1993-10-23 | 25.5 KB | 510 lines |
- DEFINITION MODULE file;
-
- (*****************************************************************************)
- (* Funktionen, die ``normale'' Dateien bearbeiten. *)
- (* *)
- (* Ein Fehler ist immer dann aufgetreten, wenn bei Funktionen mit Typ INTEGER*)
- (* ein negativer Wert zurueckgegeben wird. *)
- (* Die genaue Fehlerursache kann bei Bedarf ueber "err.errno" und die ent- *)
- (* sprechenden Konstanten ermittelt werden. Die Funktionen veraendern "errno"*)
- (* nur dann, wenn ein Fehler aufgetreten ist, bei erfolgreicher Ausfuehrung *)
- (* wird "errno" nicht veraendert. *)
- (* *)
- (* "GEMDOS": *)
- (* Die Eigenschaften der Funktionen unter dem ``blanken'' "GEMDOS" sind z.T. *)
- (* stark eingeschraenkt; unter dem Stichwort "GEMDOS" ist deswegen immer *)
- (* angegeben, in wieweit die Funktion emuliert werden kann. Ist MiNT-Unter- *)
- (* stuetzung angegeben, so ist unter der Betriebssystemerweiterung "MiNT" *)
- (* eine bessere Unterstuetzung der Funktionen zu erwarten; wie weit diese *)
- (* allerdings geht, haengt vom verwendeten Dateisystem ab. *)
- (* *)
- (* Intern sind alle Pfadangaben auf die Laenge von 'PathName' begrenzt. Ist *)
- (* ein Pfad laenger (evtl. nach der Umwandlung vom "*IX"-Stil in den "DOS"- *)
- (* Stil), wird ein Fehler gemeldet, und 'errno' auf 'ENAMETOOLONG' gesetzt. *)
- (* --------------------------------------------------------------------------*)
- (* 12-Feb-93, Holger Kleinschmidt *)
- (*****************************************************************************)
-
- FROM SYSTEM IMPORT
- (* TYPE *) ADDRESS;
-
- FROM types IMPORT
- (* TYPE *) SIGNEDWORD, UNSIGNEDWORD, UNSIGNEDLONG, SIGNEDLONG, uidT, gidT,
- inoT, timeT, offT, sizeT, ssizeT, devT, nlinkT;
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- (*======= "stat()", "open()", "creat()", "umask()", "chmod()" ===============*)
-
- TYPE
- #if reverse_set
- FileModes = (
- Type15, (* = 100000B *)
- Type14, (* = 040000B *)
- Type13, (* = 020000B *)
- Type12, (* = 010000B *)
-
- sISUID, (* = 004000B, effektive Benutzer-ID bei Ausfuehrung setzen *)
- sISGID, (* = 002000B, effektive Gruppen-ID bei Ausfuehrung setzen *)
- sISVTX, (* = 001000B reserviert, nicht POSIX *)
-
- sIRUSR, (* = 000400B, Besitzer: Leseberechtigung *)
- sIWUSR, (* = 000200B, Besitzer: Schreibberechtigung *)
- sIXUSR, (* = 000100B, Besitzer: Ausfuehr/Suchberechtigung *)
- sIRGRP, (* = 000040B, Gruppe : Leseberechtigung *)
- sIWGRP, (* = 000020B, Gruppe : Schreibberechtigung *)
- sIXGRP, (* = 000010B, Gruppe : Ausfuehr/Suchberechtigung *)
- sIROTH, (* = 000004B, Andere : Leseberechtigung *)
- sIWOTH, (* = 000002B, Andere : Schreibberechtigung *)
- sIXOTH (* = 000001B, Andere : Ausfuehr/Suchberechtigung *)
- );
- #else
- FileModes = (
- sIXOTH, (* = 000001B, Andere : Ausfuehr/Suchberechtigung *)
- sIWOTH, (* = 000002B, Andere : Schreibberechtigung *)
- sIROTH, (* = 000004B, Andere : Leseberechtigung *)
- sIXGRP, (* = 000010B, Gruppe : Ausfuehr/Suchberechtigung *)
- sIWGRP, (* = 000020B, Gruppe : Schreibberechtigung *)
- sIRGRP, (* = 000040B, Gruppe : Leseberechtigung *)
- sIXUSR, (* = 000100B, Besitzer: Ausfuehr/Suchberechtigung *)
- sIWUSR, (* = 000200B, Besitzer: Schreibberechtigung *)
- sIRUSR, (* = 000400B, Besitzer: Leseberechtigung *)
-
- sISVTX, (* = 001000B reserviert, nicht POSIX *)
- sISGID, (* = 002000B, effektive Gruppen-ID bei Ausfuehrung setzen *)
- sISUID, (* = 004000B, effektive Benutzer-ID bei Ausfuehrung setzen *)
-
- Type12, (* = 010000B *)
- Type13, (* = 020000B *)
- Type14, (* = 040000B *)
- Type15 (* = 100000B *)
- );
- #endif
- modeT = PACKEDSET OF FileModes;
-
-
- CONST
- sIRWXU = modeT{sIRUSR, sIWUSR, sIXUSR};
- sIRWXG = modeT{sIRGRP, sIWGRP, sIXGRP};
- sIRWXO = modeT{sIROTH, sIWOTH, sIXOTH};
-
- (* Die folgenden Konstanten sind nicht POSIX: *)
- CONST
- #if reverse_set
- sIFMT = modeT{Type15..Type12}; (* 170000B, Maske fuer Dateityp *)
- #else
- sIFMT = modeT{Type12..Type15}; (* 170000B, Maske fuer Dateityp *)
- #endif
- sIFCHR = modeT{Type13}; (* 020000B, zeichenor. Geraet *)
- sIFDIR = modeT{Type14}; (* 040000B, Verzeichnis *)
- sIFBLK = modeT{Type13, Type14}; (* 060000B, blockor. Geraet *)
- sIFREG = modeT{Type15}; (* 100000B, normale Datei *)
- sIFIFO = modeT{Type13, Type15}; (* 120000B, Pipe *)
- sIFLNK = modeT{Type13, Type14, Type15}; (* 160000B, symb. Link, *)
-
- (* IF st.stMode * sIFMT = sIFCHR THEN
- * ...
- *)
-
-
- TYPE
- StatRec = RECORD
- stMode : modeT; (* Dateityp & Zugriffsberechtigung *)
- stIno : inoT; (* INODE, zus. mit 'stDev' eindeutiger Index *)
- stDev : devT; (* zustaendiges Geraet *)
- stNlink : nlinkT; (* Anzahl der Links *)
- stUid : uidT; (* Benutzerkennung des Besitzers *)
- stGid : gidT; (* Gruppenkennung des Besitzers *)
- stSize : offT; (* Dateilaenge in Bytes *)
- stAtime : timeT; (* Datum/Zeit des letzten Dateizugriffs *)
- stMtime : timeT; (* Datum/Zeit der letzten Dateiveraenderung *)
- stCtime : timeT; (* Datum/Zeit der letzten INODE-Aenderung *)
- END;
-
- (*======================= "access()" ========================================*)
-
- TYPE
- #if reverse_set
- AccessModes = (
- Access15,Access14,Access13,Access12,Access11, (* --> keine 8-Bit-Menge *)
- Access10,Access9, Access8, Access7,
- Access6, Access5, Access4, Access3,
- rOK, (* = 0004H, Leseberechtigung *)
- wOK, (* = 0002H, Schreibberechtigung *)
- xOK (* = 0001H, Ausfuehr/Suchberechtigung *)
- );
- #else
- AccessModes = (
- xOK, (* = 0001H, Ausfuehr/Suchberechtigung *)
- wOK, (* = 0002H, Schreibberechtigung *)
- rOK, (* = 0004H, Leseberechtigung *)
- Access3, Access4, Access5, Access6,
- Access7, Access8, Access9, Access10,
- Access11,Access12,Access13,Access14,Access15 (* --> keine 8-Bit-Menge *)
- );
- #endif
-
- AccessMode = PACKEDSET OF AccessModes;
-
- CONST
- fOK = AccessMode{}; (* = 0000H, Existenz *)
-
-
- (*======================= "utime()" =========================================*)
-
- TYPE
- UTimeBuf = RECORD
- actime : timeT;
- modtime : timeT;
- END;
-
- (*======================= "open()" ==========================================*)
-
- TYPE
- #if reverse_set
- OpenModes = (
- Open15, Open14, Open13, Open12, (* --> keine 8-Bit-Menge *)
- Open11, Open10, Open9, Open8,
- oNONBLOCK, (* nicht fuer regulaere Dateien *)
- oNOCTTY, (* nicht fuer regulaere Dateien *)
- oEXCL, (* Neu Anlegen nicht erlaubt, falls schon vorhanden *)
- oTRUNC, (* vorhandene Datei auf Laenge 0 kuerzen *)
- oCREAT, (* Datei anlegen, falls nicht vorhanden *)
- oAPPEND, (* Schreiben immer ans Ende des Files *)
-
- rw1,
- rw0
- );
- #else
- OpenModes = (
- rw0,
- rw1,
-
- oAPPEND, (* Schreiben immer ans Ende des Files *)
- oCREAT, (* Datei anlegen, falls nicht vorhanden *)
- oTRUNC, (* vorhandene Datei auf Laenge 0 kuerzen *)
- oEXCL, (* Neu Anlegen nicht erlaubt, falls schon vorhanden *)
- oNOCTTY, (* nicht fuer regulaere Dateien *)
- oNONBLOCK, (* nicht fuer regulaere Dateien *)
- Open8, Open9, Open10, Open11,
- Open12, Open13, Open14, Open15 (* --> keine 8-Bit-Menge *)
- );
- #endif
-
- OpenMode = PACKEDSET OF OpenModes;
-
- CONST
- oACCMODE = OpenMode{rw0, rw1}; (* Maske fuer erlaubte Operationen *)
-
- oRDONLY = OpenMode{ }; (* 0000H, nur Lesen erlaubt *)
- oWRONLY = OpenMode{rw0}; (* 0001H, nur Schreiben erlaubt *)
- oRDWR = OpenMode{rw1}; (* 0002H, Lesen und Schreiben erlaubt *)
-
- (*======================= "lseek()" =========================================*)
-
- TYPE
- SeekMode = (
- SeekSet, (* = 0, absolute Positionsangabe *)
- SeekCur, (* = 1, Positionsangabe relativ zur augenblicklichen Position *)
- SeekEnd (* = 2, Positionsangabe relativ zum Dateiende *)
- );
-
- (*======================= "pipe()" ==========================================*)
-
- TYPE
- PipeBuf = RECORD
- readh : INTEGER;
- writeh : INTEGER;
- END;
-
- (*===================== "open()", "creat()" =================================*)
-
- CONST (* kleinstes gueltiges Handle, nicht POSIX: *)
- #if GEMDOS
- MINHANDLE = -3;
- #else
- MINHANDLE = 0;
- #endif
-
- (*===========================================================================*)
-
- CONST (* Die immer geoeffneten Standardkanaele *)
- StdinFileNo = 0;
- StdoutFileNo = 1;
- StderrFileNo = 2; (* "GEMDOS": Durch 'DosFile' sichergestellt *)
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- PROCEDURE creat ((* EIN/ -- *) REF file : ARRAY OF CHAR;
- (* EIN/ -- *) mode : modeT ): INTEGER;
-
- PROCEDURE open ((* EIN/ -- *) REF file : ARRAY OF CHAR;
- (* EIN/ -- *) access : OpenMode;
- (* EIN/ -- *) mode : modeT ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | "open()" oeffnet eine bereits vorhandene Datei namens <file> in dem durch|
- | <mode> festgelegten Modus (Funktionalitaet siehe Def. von 'FileModes'), |
- | bzw. erzeugt eine neue, falls in <mode> 'oCREAT' gesetzt ist. Die Datei |
- | wird gleich geoeffnet und ist ueber die als Funktionswert zurueckgelie- |
- | ferte Kennung referenzierbar, falls diese nicht kleiner als 'MINHANDLE' |
- | ist. |
- | "creat()" entspricht: "open(file,OpenMode{oCREAT,oTRUNC,oWRONLY},mode)" |
- | |
- | "GEMDOS": Es koennen auch Geraete geoeffnet werden (muessen aber nicht), |
- | sodass auch negative Werte auftreten koennen. Ein Fehler ist |
- | erst aufgetreten, falls der Funktionswert 'MINHANDLE' unter- |
- | schreitet. |
- | <access>: oNOCTTY und oNONBLOCK und oAPPEND werden ignoriert. |
- | <mode>: Die Datei kann lediglich schreibgeschuetzt werden. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE close ((* EIN/ -- *) h : INTEGER ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Die Datei mit der Kennung <h> wird geschlossen. Danach kann nicht mehr |
- | ueber <h> auf die Datei zugegriffen werden. Die Kennung <h> ist jetzt |
- | ``frei'', sodass sie wieder mit einer anderen Datei verbunden werden |
- | kann. |
- --------------------------------------------------------------------------*)
-
-
-
- PROCEDURE read ((* EIN/ -- *) h : INTEGER;
- (* EIN/ -- *) buf : ADDRESS;
- (* EIN/ -- *) len : sizeT ): ssizeT;
-
- PROCEDURE write ((* EIN/ -- *) h : INTEGER;
- (* EIN/ -- *) buf : ADDRESS;
- (* EIN/ -- *) len : sizeT ): ssizeT;
-
- (*--------------------------------------------------------------------------
- | "read()" liest <len> Bytes aus der Datei mit der Kennung <h> in den Puf- |
- | fer ab der Adresse <buf>. Als Funktionswert wird die Anzahl der gelesenen|
- | Bytes zurueckgeliefert (0 = Dateiende, -1 = Fehler). |
- | "write()" schreibt <len> Bytes aus dem Puffer mit der Startadresse <buf> |
- | in die Datei mit der Kennung <h>. Als Funktionswert wird die Anzahl der |
- | geschriebenen Bytes zurueckgeliefert (<> len = Fehler). |
- | |
- | "GEMDOS": Das Lesen/Schreiben von/auf Terminals kann nicht beeinflusst |
- | werden (Interpretation von ^C u.ae.). |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE lseek ((* EIN/ -- *) h : INTEGER;
- (* EIN/ -- *) off : offT;
- (* EIN/ -- *) mode : SeekMode ): offT;
-
- (*--------------------------------------------------------------------------
- | Die aktuelle Lese/Schreibposition der Datei mit der Kennung <h> wird, je |
- | nach <mode>, Beschreibung siehe dort, um <off> Bytes verschoben, bzw. |
- | auf Position <off> gesetzt. Hierbei kann auch ueber das Ende der Datei |
- | positioniert werden, die Datei wird aber erst dann (virtuell) verlaengert|
- | (-> ``gap'') wenn ein Schreibvorgang hinter dem tatsaechlichen bisherigen|
- | Dateiende stattfindet. |
- | Als Funktionswert wird die aktuelle Schreib/Leseposition geliefert. |
- | |
- | "GEMDOS": Es ist kein Verlaengern der Datei durch ein "Fseek" hinter das |
- | augenblickliche Dateiende moeglich, daher wird bei "lseek" das |
- | Verlaengern durch blockweises (jeweils 1kB) Schreiben mit Null-|
- | bytes realisiert; das kann natuerlich je nach Umfang der Erwei-|
- | terung ein bisschen dauern. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
-
-
- PROCEDURE dup ((* EIN/ -- *) h : INTEGER ): INTEGER;
-
- PROCEDURE dup2 ((* EIN/ -- *) h : INTEGER;
- (* EIN/ -- *) h2 : INTEGER ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | "dup()" liefert zur Dateikennung <h> eine zweite Kennung (die kleinste |
- | freie Kennung), sodass die entsprechende Datei ueber beide Kennungen an- |
- | gesprochen werden kann. |
- | Bei "dup2()" kann die kleinstmoegliche neue Kennung (<h2>) vorgegeben |
- | werden; Als Funktionswert wird die kleinste freie Kennung geliefert, die |
- | nicht kleiner als <h2> ist. |
- | |
- | "GEMDOS": Hier funktionieren die Umlenkungen erst ab TOS 1.04 einiger- |
- | massen, aber auch nicht voellig korrekt (z.B. keine mehrfache |
- | Umlenkung, kein Pexec nach "dup()"). |
- | "dup()" : <h> muss die Nummer eines Standardkanals sein, also |
- | 0 <= h <= 5. |
- | "dup2()": <h2> muss die Nummer eines Standardkanals sein, also |
- | 0 <= h2 <= 5; weiterhin muss <h> ein Nicht-Standard-Handle |
- | (normales Datei- oder Geraetehandle) sein. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE isatty ((* EIN/ -- *) h : INTEGER ): BOOLEAN;
-
- (*--------------------------------------------------------------------------
- | Liefert TRUE, falls <h> das Handle eines (Pseudo)Terminals ist. |
- | |
- | "GEMDOS": Der Test wird mit "DosFile.IsDevice()" durchgefuehrt. |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE umask ((* EIN/ -- *) excl : modeT ): modeT;
-
- (*--------------------------------------------------------------------------
- | Setzt die Dateierstellungsmaske, die als Filter fuer die Zugriffsberech- |
- | tigung benutzt wird, wenn eine Datei mit "open()" oder "creat()" neu |
- | erstellt, oder ein Verzeichnis mit "mkdir()" angelegt wird: Von der ange-|
- | gebenen Zugriffsberechtigung wird immer zuerst die Maske subtrahiert, |
- | sodass Dateien z.B. grundsaetzlich fuer Gruppe und andere schreibge- |
- | schuetzt werden koennen. |
- | Als Funktionswert wird die alte Maske zurueckgeliefert. |
- | |
- | "GEMDOS": nicht sonderlich sinnvoll |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE chmod ((* EIN/ -- *) REF file : ARRAY OF CHAR;
- (* EIN/ -- *) mode : modeT ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Setzt die Schreib-, Lese- und Ausfuehrungsrechte und die ``set user id'' |
- | und ``set group id'' Flags der Datei <file>. |
- | |
- | "GEMDOS": Es wird nur sIWUSR ausgewertet: wenn das Bit gesetzt ist, wird |
- | 'faRDONLY' im Dateiattribut geloescht und umgekehrt. |
- | Das Dateiattribut 'faCHANGED' wird nicht geaendert. Attribute |
- | von Verzeichnissen koennen nicht geaendert werden (ist aber |
- | kein Fehler). |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE chown ((* EIN/ -- *) REF file : ARRAY OF CHAR;
- (* EIN/ -- *) uid : uidT;
- (* EIN/ -- *) gid : gidT ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Setzt die Besitzer- und Gruppenkennung der Datei <file>. |
- | |
- | "GEMDOS": funktioniert nur unter MiNT, sonst wird ein Fehler gemeldet. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE utime ((* EIN/ -- *) REF file : ARRAY OF CHAR;
- (* EIN/ -- *) time : UTimeBuf ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Setzt die Zeit des letzten Dateizugriffs (st.stAtime) der Datei <file> |
- | auf <time.actime> und die Zeit der letzten Dateiveraenderung (st.stMtime)|
- | auf <time.modtime>. Die Zeit der letzten Statusaenderung (st.stCtime) |
- | wird automatisch auf das aktuelle Datum gesetzt. Wird fuer eine Zeit eine|
- | Null uebergeben, wird das aktuelle Datum eingesetzt. |
- | |
- | "GEMDOS": Zeit und Datum sind im DOS-Format, siehe 'types.timeT'. Es wird|
- | nur <time.modtime> ausgewertet. |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE stat ((* EIN/ -- *) REF file : ARRAY OF CHAR;
- (* -- /AUS *) VAR st : StatRec ): INTEGER;
-
- PROCEDURE fstat ((* EIN/ -- *) hndl : INTEGER;
- (* -- /AUS *) VAR st : StatRec ): INTEGER;
-
- PROCEDURE lstat ((* EIN/ -- *) REF file : ARRAY OF CHAR;
- (* -- /AUS *) VAR st : StatRec ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Die Prozeduren liefern zum Namen <file> einer Datei bzw. einer Datei- |
- | kennung <hndl> die Informationen aus dem INODE (siehe Def. von 'modeT' |
- | und 'StatRec'. |
- | Bei einem 'Symbolischen Link' liefert "stat()" Informationen ueber die |
- | physikalisch referenzierte Datei, "lstat()" Informationen ueber den Link |
- | selber, ansonsten sind die beiden Funktionen identisch. |
- | |
- | "GEMDOS": |
- | o 'stMode': Die Berechtigungen fuer Besitzer, Gruppe und Andere |
- | sind identisch; Leseberechtigung ist immer gegeben, Schreib- |
- | berechtigung ist vorhanden, falls 'faRDONLY' im Dateiattribut |
- | nicht gesetzt ist, die Ausfuehrberechtigung bei regulaeren |
- | Dateien wird mit 'DosFile.IsExec' festgestellt, Verzeichnisse |
- | haben immer Suchberechtigung. Geraete werden mit |
- | 'DosFile.IsDosDevice' ermittelt, Verzeichnisse durch ein |
- | gesetztes 'faSUBDIR' im Dateiattribut, alles andere sind |
- | regulaere Dateien. |
- | o 'stIno': ein fortlaufender Wert, der keine Beziehung zur Datei|
- | hat. |
- | o 'stDev': die (aktuelle) Laufwerksnummer (A = 0, B = 1...). |
- | o 'stNlink': bei Verzeichnissen zwei (wegen ".."), sonst eins. |
- | o 'stSize': bei Verzeichnissen konstant 1024. |
- | o 'stAtime', 'stMtime', 'stCtime': die Zeiten sind identisch |
- | und im kodierten DOS-Format, aber das Datum ist im hoeherwer- |
- | tigen Wort, sodass durch einen direkten Vergleich des gesamten|
- | Langwortes die zeitliche Reihenfolge korrekt ermittelt wird. |
- | Bei Geraeten werden aktuelle Zeit und aktuelles Datum genommen|
- | Bei Wurzelverzeichnissen ist der Wert Null. |
- | ("MiNT"-Unterstuetzung) |
- | |
- | "lstat()": ohne MiNT ist diese Funktion mit "stat()" identisch. |
- | Diese Funktion ist noch nicht POSIX-Standard. |
- | ("MiNT"-Unterstuetzung) |
- | |
- | "fstat()": ohne MiNT sind die einzigen zuverlaeesigen Informa- |
- | tionen 'stSize' und 'stMtime', falls <hndl> eine gueltige Ken- |
- | nung einer regulaeren Datei ist. |
- | ("MiNT"-Unterstuetzung) |
- --------------------------------------------------------------------------*)
-
- PROCEDURE sISCHR ((* EIN/ -- *) stMode : modeT ): BOOLEAN;
- PROCEDURE sISDIR ((* EIN/ -- *) stMode : modeT ): BOOLEAN;
- PROCEDURE sISBLK ((* EIN/ -- *) stMode : modeT ): BOOLEAN;
- PROCEDURE sISREG ((* EIN/ -- *) stMode : modeT ): BOOLEAN;
- PROCEDURE sISFIFO ((* EIN/ -- *) stMode : modeT ): BOOLEAN;
- (* noch nicht POSIX: *)
- PROCEDURE sISLNK ((* EIN/ -- *) stMode : modeT ): BOOLEAN;
-
- (*--------------------------------------------------------------------------
- | Diese Funktionen sind bei POSIX als Makros definiert, und liefern TRUE, |
- | falls der im 'stMode'-Feld der StatRec-Struktur kodierte Dateityp dem |
- | durch den Prozedurnamen angedeuteten entspricht. |
- | Es sollten nur diese Prozeduren verwendet werden, um den Dateityp zu |
- | bestimmen. |
- --------------------------------------------------------------------------*)
-
-
-
- PROCEDURE access ((* EIN/ -- *) REF file : ARRAY OF CHAR;
- (* EIN/ -- *) acc : AccessMode ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Es wird die Existenz (<acc> = fOK) oder die Lese-, Schreib oder Ausfuehr-|
- | bzw. Suchberechtigung einer Datei getestet. Beim Test wird beruecksich- |
- | tigt, ob der ausfuehrende Prozess der Besitzer der Datei ist, der Gruppe |
- | des Besitzers angehoert oder ein Aussenstehender ist (Es werden die |
- | realen Kennungen getestet). |
- | |
- | "GEMDOS": Die bei "stat()" genannten Einschraenkungen gelten. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
-
- PROCEDURE pipe ((* -- /AUS *) VAR ph : PipeBuf ): INTEGER;
-
- (*--------------------------------------------------------------------------
- | Generiert einen Kommunikationskanal zwischen zwei (Unter)Prozessen. Der |
- | eine Prozess kann ueber <ph.writeh> etwas schreiben, das der andere |
- | ueber <ph.readh> lesen kann. Die Groesse einer ``Pipe'' ist intern be- |
- | grenzt (z.B. auf 2kB oder 4kB), sodass der schreibende Prozess zeitweise |
- | gestoppt werden kann, bis wieder etwas Platz in der Pipe vorhanden ist. |
- | |
- | "GEMDOS": funktioniert nur unter MiNT, sonst wird ein Fehler gemeldet. |
- | ("MiNT"-Unterstuetzung.) |
- --------------------------------------------------------------------------*)
-
- END file.
-