我想编写一个检查目录是否存在的程序;如果该目录不存在,那么它会在其中创建目录和日志文件,但如果该目录已经存在,那么它只是在该文件夹中创建一个新的日志文件。
我如何在C中使用Linux?
答案 0 :(得分:118)
查看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
命令查看这些功能的手册。
答案 1 :(得分:19)
您可以使用mkdir:
#include <sys/stat.h>
#include <sys/types.h>
int result = mkdir("/home/me/test.txt", 0777);
答案 2 :(得分:2)
我想编写一个程序(...)创建目录和(...)文件在其中
因为这是一个非常常见的问题,这里是创建多级目录而不是调用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 )
printf("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);
}
答案 3 :(得分:2)
正如 Paul R. 所说,您可以在没有 stat 的情况下使用 mkdir 来仅使用一个系统调用。
mkdir 有 errno -> EEXIST 如果您需要目录存在的信息。
int mkdir (const char *filename, mode_t mode)
#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 指定新目录文件的文件权限。
读+写+执行:S_IRWXU(用户)、S_IRWXG(组)、S_IRWXO(其他)
来源: https://www.gnu.org/software/libc/manual/html_node/Permission-Bits.html