我想写一个程序来检查一个目录是否存在;如果该目录不存在,那么它会在其中创建一个目录和一个日志文件,但如果该目录已经存在,那么它只会在该文件夹中创建一个新的日志文件。在C中如何在Linux中实现这一点?
nbewdwxp1#
查看stat以检查目录是否存在,和mkdir创建一个目录。
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命令查看这些函数的手册。
man 2 stat
man 2 mkdir
uttx8gqw2#
你可以使用mkdir:$ man 2 mkdir
#include <sys/stat.h> #include <sys/types.h> int result = mkdir("/home/me/test.txt", 0777);
字符串
owfi6suc3#
我想写一个程序,(.)创建目录和(.)文件里面因为这是一个非常常见的问题,下面是创建多层目录并调用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'\n%m\n", 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); }
w1e3prcc4#
第一个月
#include <sys/types.h> #include <errno.h> #include <string.h> if (mkdir("/some/directory", S_IRWXU | S_IRWXG | S_IRWXO) == -1) { printf("Error: %s\n", strerror(errno)); }
字符串最好的做法是,建议使用整数别名作为mode。参数mode指定新目录的文件权限。读+写+执行:S_IRWXU(用户)、S_IRWXG(组)、S_IRWXO(其他)来源:https://www.gnu.org/software/libc/manual/html_node/Permission-Bits.html如果你想知道这个目录是否存在,请查找EEXIST的errno。
yvfmudvl5#
下面是Jens Harms代码的简化版本,它不使用递归。
FILE * fopen_mkdir(const char *path, const char *mode) { char *p = strdup(path); char *sep = strchr(p+1, '/'); while(sep != NULL) { *sep = '\0'; if (mkdir(p, 0755) && errno != EEXIST) { fprintf(stderr, "error while trying to create %s\n", p); } *sep = '/'; sep = strchr(sep+1, '/'); } free(p); return fopen(path, mode); }
5条答案
按热度按时间nbewdwxp1#
查看
stat
以检查目录是否存在,和
mkdir
创建一个目录。字符串
您可以使用
man 2 stat
和man 2 mkdir
命令查看这些函数的手册。uttx8gqw2#
你可以使用mkdir:
$ man 2 mkdir
字符串
owfi6suc3#
我想写一个程序,(.)创建目录和(.)文件里面
因为这是一个非常常见的问题,下面是创建多层目录并调用fopen的代码。我使用gnu扩展来用printf打印错误消息。
字符串
w1e3prcc4#
第一个月
字符串
最好的做法是,建议使用整数别名作为mode。参数mode指定新目录的文件权限。
读+写+执行:S_IRWXU(用户)、S_IRWXG(组)、S_IRWXO(其他)
来源:https://www.gnu.org/software/libc/manual/html_node/Permission-Bits.html
如果你想知道这个目录是否存在,请查找EEXIST的errno。
yvfmudvl5#
下面是Jens Harms代码的简化版本,它不使用递归。
字符串