如何在c中为文件名添加整数前缀



我需要编写一个程序来使用系统调用创建文件。

输入文件名以宏形式给出(#define filename"/log/data.log"(。我必须在文件名中添加一个数字,并将其更改为"/log/data_1.log或/log/data_2.log";根据要求。

我正在使用open()创建文件。

#define filename "/log/data.log"
int fd=0;
int num; //This is the number I want to add to the file name
if(fd = open(file_name, O_RDWR | O_CREAT, 0666) ) < 0 )
{  
printf("Could not open the log file: %sn", strerror(errno) );
return -1;
}

您想要这样的东西:

#define filenametemplate "/log/data_%d.log"
...
int num; //This is the number I want to add to the file name    
...
char filename[100];
sprintf(filename, filenametemplate, num);
// now filename contains "/log/data123.log" (if num contains 123)
...

我建议使用asprintf((GNU扩展:它在Linux、Mac OS、FreeBSD和其他平台上都可用。

本质上,您将一个char指针初始化为NULL,然后在想要创建新字符串时将其传递给asprintf。它将为其动态分配内存,并返回结果字符串的长度。如果发生错误,它将返回一个负值。在你的C程序开始时,你需要以下内容来展示这些功能,

#define  _GNU_SOURCE   /* Needed on Linux for asprintf() to be exposed */
#include <stdlib.h>    /* For free(), exit() and EXIT_FAILURE */
#include <stdio.h>     /* For asprintf() and stderr */
#include <string.h>    /* For strerror() */
#include <errno.h>     /* For errno */

然后,在您的main((或其他地方,

char *filename = NULL;
if (asprintf(&filename, "/log/data_%d.log", num) < 0) {
fprintf(stderr, "Cannot construct log file name: %s.n", strerror(errno));
exit(EXIT_FAILURE);
}
int fd = open(filename, O_CREAT | O_RDWR, 0666);
if (fd == -1) {
fprintf(stderr, "%s: Cannot create log file: %s.n", filename, strerror(errno));
free(filename);
exit(EXIT_FAILURE);
}
/* Filename is no longer needed; free it */
free(filename);
filename = NULL;

相关内容

  • 没有找到相关文章

最新更新