Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

mktemp - Eindeutigen temporären Dateinamen erzeugen

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

char *mktemp(char *vorlage);

mktemp erzeugt aus einer Zeichenkette vorlage, die mindestens 8 Zeichen enthalten muss, eindeutige Namen für temporäre SAM-Dateien. Der Name wird aus den Zeichen in vorlage folgendermaßen gebildet:

  • Die ersten drei Zeichen werden ersetzt durch "#T.",

  • das vierte Zeichen wird ersetzt durch ein Zeichen, das sich pro mktemp Aufruf ändert (Buchstaben A-Z, Ziffern 0-9),

  • die letzten vier Zeichen werden ersetzt durch die TSN-Nummer der aktuellen Task (seit LOGON),

  • Zeichen zwischen den ersten und letzten vier Zeichen bleiben unverändert.

Hätte vorlage z.B den Inhalt "XXXX.ABC.XXXX" und die TSN-Nummer der aktuellen Task wäre 6082, dann erzeugt mktemp beim ersten Aufruf den temporären Namen

#T.A.ABC.6082

Returnwert

Zeiger auf die Ergebniszeichenkette, die den neuen Namen enthält



bei Erfolg.

 

NULL-Zeiger

wenn ein Fehler auftrat, z.B. weil vorlage weniger als 8 Zeichen enthält oder
weil die zulässige maximale Anzahl (36) der mktemp-Aufrufe überschritten ist (siehe auch Hinweis).

Hinweise

Da für die Bildung eines eindeutigen Namens die Buchstaben A-Z und die Ziffern 0-9 verwendet werden, ist die Anzahl der mktemp-Aufrufe pro Programmablauf auf 36 begrenzt.

Temporäre Dateien werden automatisch bei Beendigung einer Task (LOGOFF) gelöscht. Wenn allerdings bei der Systemgenerierung das standardmäßige Präfix (#) für temporäre Dateien geändert wurde, bleiben die Dateien erhalten.

Beispiel

Folgendes Programm erzeugt drei eindeutige temporäre Dateinamen und öffnet die Dateien zum Schreiben und Lesen.

#include <stdio.h>
FILE *fp1, *fp2, *fp3;
char s[] = "XXXX.temp.XXXX";
int main(void)
{ 
   mktemp(s);
   fp1 = fopen(s,"w+r");
   printf("%s\n",s);              /* erzeugter Name: #T.A.TEMP.6082 */
   mktemp(s);
   fp2 = fopen (s,"w+r");
   printf("%s\n",s);              /* erzeugter Name: #T.B.TEMP.6082 */
   mktemp(s);
   fp3 = fopen (s,"w+r");
   printf("%s\n",s);              /* erzeugter Name: #T.C.TEMP.6082 */
   return 0;
}