web-dev-qa-db-ja.com

Cでの新しいディレクトリの作成

ディレクトリの存在をチェックするプログラムを書きたい。そのディレクトリが存在しない場合は、ディレクトリとその中にログファイルを作成しますが、ディレクトリが既に存在する場合は、そのフォルダに新しいログファイルを作成するだけです。

LinuxでCでこれを行うにはどうすればよいですか?

80
Jeegar Patel

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コマンドで見ることができます。

125
Arnaud Le Blanc

Mkdirを使用できます。

$ man 2 mkdir

 #include <sys/stat.h>
 #include <sys/types.h>

 int result = mkdir("/home/me/test.txt", 0777);
20
Paul R

(...)ディレクトリとその中に(...)ファイルを作成するプログラムを書きたい

これは非常に一般的な質問なので、複数レベルのディレクトリを作成して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
Jens Harms