在C中创建一个新目录

时间:2011-09-15 11:46:04

标签: c linux directory

我想编写一个检查目录是否存在的程序;如果该目录不存在,那么它会在其中创建目录和日志文件,但如果该目录已经存在,那么它只是在该文件夹中创建一个新的日志文件。

我如何在C中使用Linux?

4 个答案:

答案 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 statman 2 mkdir命令查看这些功能的手册。

答案 1 :(得分:19)

您可以使用mkdir:

$ man 2 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)

  1. 正如 Paul R. 所说,您可以在没有 stat 的情况下使用 mkdir 来仅使用一个系统调用。

  2. 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