Ich weiß, wie man es im Allgemeinen macht, aber ich habe eine bestimmte Situation.Wie kann man verschiedene in einer Funktion erstellte Dateien richtig benennen?
Ich entwickle eine Funktion, die Zertifikat von TLS in einer Datei speichert. Die Argumente der Funktion sind das Zertifikat (wie unsigned char *
) und seine Länge.
Diese Funktion wird oft in sehr kurzer Zeit aufgerufen, daher besteht das Hauptproblem darin, jeder erstellten Datei einen anderen Namen zu geben.
Am Anfang habe ich die „Zeit“ verschiedene Namen
strftime(filename, sizeof(filename), "cert_%d-%m-%Y_%H:%M:%S.der", timeinfo);
aber das Problem ist, wenn zwei oder mehr Dateien in einem Zeitraum kürzer als eine Sekunde, die erstellt werden, geben neueste Datei überschrieb die alte.
Wie kann ich das richtig lösen? Irgendein Vorschlag ? Dies ist der Funktionscode:
static void save_certificate_FILE(const unsigned char * cert, u_int16_t cert_len)
{
FILE *fw;
X509 *x_cert;
char filename[cert_len];
struct tm *timeinfo;
time_t rawtime;
x_cert = d2i_X509(NULL, &cert, cert_len);
if (!x_cert) {
fprintf(stderr, "Error on d21_X509 funtion\n");
return;
}
// get the time
time(&rawtime);
timeinfo = localtime (&rawtime);
// save every file with the time certificate was catched
strftime(filename, sizeof(filename), "cert_%d-%m-%Y_%H:%M:%S.der", timeinfo);
if(!(fw = fopen(filename,"w"))) {
fprintf(stderr, "Error on opening file descriptor fw\n");
return;
}
// function to convert raw data (DER) to PEM certificate (good for parsing with openssl)
i2d_X509_fp(fw, x_cert);
// free cert e close file descriptor
X509_free(x_cert);
fclose(fw);
}
Was ist 'mkstemp'? Siehe [hier] (https://linux.die.net/man/3/mkstemp) –
Unrelated: Ich empfehle, 'cert_% Y-% m-% d% H-% M-% S ...' zu verwenden , da dies viel besser ist, und vermeidet es, sich mit ':' s in Dateinamen herumzuärgern. – alk
Warum fügen Sie nicht einfach ein zufälliges Ziffernpaar hinzu? – jabujavi