C言語入門講座。関数、サンプル集を参考にして、 C言語をマスターしよう。初心者から上級者まで。

ディレクトリを作成する

2012.08.10

mkdir関数は、ディレクトリ(フォルダ)を作成します。

この関数は、C言語のライブラリ関数(標準関数)ではありませんので、コンパイラにより、使えない場合があります。

#include <sys/stat.h>
int mkdir(const char *pathname, mode_t mode);

*pathnameは作成するディレクトリをパス名で指定します。
modeはディレクトリのアクセス許可情報(パーミッション)を指定します。

戻り値として、処理が成功した場合は0が、エラーの場合は-1を返します。

第2引数のmodeについては、chmod関数をご覧ください。ただし、ここで指定した許可情報がそのまま付与されるわけではなく、実際の許可情報は mode & ~umask & 0777 となります。

次の例題プログラムでは、許可情報として0777(rwxrwxrwx)を指定していますが、umask値が0022のため、実際に付与される許可情報は0755(rwxr-xr-x)になっています。

プログラム 例

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

int main(int argc, char **argv)
{
  int     return_code = 0;

  if (argc == 2) {
    /* ディレクトリを作る */
    if (mkdir(*(argv + 1),
                S_IRUSR | S_IWUSR | S_IXUSR |         /* rwx */
                S_IRGRP | S_IWGRP | S_IXGRP |         /* rwx */
                S_IROTH | S_IXOTH | S_IXOTH) == 0) {  /* rwx */
      printf('%sを作成しました\n', *(argv + 1));
    }
    else {
      printf('%sを作成できませんでした\n', *(argv + 1));
      perror('');
      return_code = 1;
    }
  }
  else {
    printf('実行時引数の数が不当です\n');
    return_code = 2;
  }

  return return_code;
}

例の実行結果

$ ls -ld DIR3
ls: cannot access DIR3: そのようなファイルやディレクトリはありません
$
$ umask
0022
$ ./mkdir.exe ./DIR3
./DIR3を作成しました
$
$ ls -ld DIR3
drwxr-xr-x 2 user users 4096 2008-08-01 14:02 DIR3
$

関連記事