gpt4 book ai didi

c - 如何正确命名函数内创建的不同文件?

转载 作者:行者123 更新时间:2023-11-30 14:55:35 24 4
gpt4 key购买 nike

我知道一般情况下该怎么做,但我有一个特殊的情况。

我正在开发一个将 TLS 的证书保存在文件中的函数。该函数的参数是证书(如 unsigned char *)及其长度。

该函数在很短的时间内被调用多次,因此主要问题是为创建的每个文件指定不同的名称。

一开始我用“时间”来命名不同的名字

strftime(文件名, sizeof(文件名), "cert_%d-%m-%Y_%H:%M:%S.der", timeinfo);

但问题是,如果在不到一的时间内创建两个或多个文件,则最新文件会覆盖旧文件。

如何正确解决这个问题?有什么建议吗?这是函数代码:

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);
}

最佳答案

正如 @Chris Turner 在评论中建议我的那样,我使用 gettimeofday 来保留命名文件的时间(更好地按日期排序)。

这是我用来解决的代码:

 gettimeofday(&tv, NULL);
millisec = lrint(tv.tv_usec/1000.0); // Round to nearest millisec
if(millisec>=1000) { // Allow for rounding up to nearest second
millisec -=1000;
tv.tv_sec++;
}

timeinfo = localtime(&tv.tv_sec);

/* save every file with the time certificate was catched */
strftime(filename, sizeof(filename), "cert_%Y-%m-%d_%H-%M-%S-%%03u.der", timeinfo);
snprintf(buff, sizeof(buff), filename, tv.tv_usec);

关于c - 如何正确命名函数内创建的不同文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45752965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com