【作業記録】mkdir -p の模倣プログラムを作ってみた

mkdir -p の機能を模倣するプログラムをC言語で書いたので、その作業記録です。

作ったものの全量です。

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

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        fprintf(stderr, "Usage: mkdir <PATH>");
        exit(EXIT_FAILURE);
    }

    unsigned int current = 0;
    char buf[256];

    for (size_t i = 0;; i++)
    {
        if (argv[1][i] == '\0')
        {
            printf("[create last %s]\n", argv[1]);

            if (mkdir(argv[1], 0775) < 0)
            {
                perror(argv[0]);
                exit(EXIT_FAILURE);
            }
            
            break;
        }

        printf("[now %c]\n", argv[1][i]);

        if (argv[1][i] == '/')
        {
            buf[current] = '\0';

            printf("[create %s]\n", buf);

            if (mkdir(buf, 0775) < 0)
            {
                perror(argv[0]);
                exit(EXIT_FAILURE);
            }

            buf[current] = '/';
        } else {
            buf[current] = argv[1][i];
        }

        current++;
    }

    exit(EXIT_SUCCESS);
}
  • mkdir の練習として「普通のLINUXプログラミング第2版」の問題としてあったのでやりました
  • 上記のプログラムは ./mkdir dirA/dirB/dirC のように使います
  • mkdir は次の2つの引数を取ります
  • 上記のプログラムでは入力された文字を / ごとに判定してディレクトリを作るようにしました
    • \0ディレクトリパスに挿入している箇所がありますが、 \0 は終端文字として認識されるものです