在 C 中创建新目录
- 2024-10-14 08:40:00
- admin 原创
- 74
问题描述:
我想编写一个程序来检查目录是否存在;如果该目录不存在,那么它会创建该目录并在其中创建一个日志文件,但如果该目录已经存在,那么它只会在该文件夹中创建一个新的日志文件。
我怎样在 Linux 上用 C 语言实现这个功能?
解决方案 1:
检查stat
目录是否存在,
并mkdir
创建一个目录。
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
struct stat st = {0};
if (stat("/some/directory", &st) == -1) {
mkdir("/some/directory", 0700);
}
man 2 stat
您可以使用和命令查看这些功能的手册man 2 mkdir
。
解决方案 2:
您可以使用 mkdir:
$ man 2 mkdir
#include <sys/stat.h>
#include <sys/types.h>
int result = mkdir("/home/me/test.txt", 0777);
解决方案 3:
我想编写一个程序来创建目录并在其中创建文件
因为这是一个非常常见的问题,所以下面是创建多层目录然后调用 fopen 的代码。我使用 gnu 扩展通过 printf 打印错误消息。
void rek_mkdir(char *path) {
char *sep = strrchr(path, '/');
if(sep != NULL) {
*sep = 0;
rek_mkdir(path);
*sep = '/';
}
if(mkdir(path, 0777) && errno != EEXIST)
fprintf(stderr, "error while trying to create '%s'
%m
", path);
}
FILE *fopen_mkdir(char *path, char *mode) {
char *sep = strrchr(path, '/');
if(sep) {
char *path0 = strdup(path);
path0[ sep - path ] = 0;
rek_mkdir(path0);
free(path0);
}
return fopen(path,mode);
}
解决方案 4:
要在 C 中创建新目录,可以使用mkdir
中定义的函数<sys/stat.h>
。此函数需要两个参数:新目录的路径及其权限。
int mkdir (const char *filename, mode_t mode)
以下是一个例子:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
if (mkdir("/some/directory", S_IRWXU | S_IRWXG | S_IRWXO) == -1) {
printf("Error: %s
", strerror(errno));
}
要点:
权限:
mode
中的参数指定mkdir
目录的权限。为了达到最佳效果,建议使用mode
.的整数别名S_IRWXU
,S_IRWXG
和S_IRWXO
分别表示用户、组和其他人的读取、写入和执行权限。在此示例中,S_IROTH | S_IXOTH
代替 表示S_IRWXO
其他用户,这允许其他用户读取和执行但不允许写入。错误检查:如果
mkdir
返回-1
,则表示发生了错误。使用strerror(errno)
将为您提供人性化的错误信息。常见错误包括目录已存在(EEXIST
在 中检查errno
)文档参考:为了更深入地了解权限位,可以参考 GNU C 库文档:GNU 权限位
解决方案 5:
这是不使用递归的 Jens Harms 代码的简化版本。
FILE * fopen_mkdir(const char *path, const char *mode)
{
char *p = strdup(path);
char *sep = strchr(p+1, '/');
while(sep != NULL)
{
*sep = ' ';
if (mkdir(p, 0755) && errno != EEXIST)
{
fprintf(stderr, "error while trying to create %s
", p);
}
*sep = '/';
sep = strchr(sep+1, '/');
}
free(p);
return fopen(path, mode);
}
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD