11

一時ディレクトリを作成してその中でいくつかの操作を実行し、最後にすべてを削除しようとしています。UNIXシステムでC言語を使用しているので、この環境にある程度対応したいと考えています。

これをプログラムする最良の方法は何ですか?

編集 ファイルだけでなく、ディレクトリが本当に必要です。svn checkout小さなプログラムは、私がプロジェクトを実行できるかどうかを試すことを目的としています。したがって、ファイルとディレクトリの完全な階層を作成できる必要があります。

4

2 に答える 2

5

mkdtemp()この関数は、C API の通常の関数と一緒に使用することをお勧めします ( glibc)。完全な答えは次のとおりです。

編集:関数は空のディレクトリを削除することのみを目的としているため、残念ながらNemanja Boricからの回答は実際には使用できません。rmdir()完全な正解は次のとおりです。

#define  _POSIX_C_SOURCE 200809L
#define  _XOPEN_SOURCE 500L

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <errno.h>
#include <ftw.h>

/* Call-back to the 'remove()' function called by nftw() */
static int
remove_callback(const char *pathname,
                __attribute__((unused)) const struct stat *sbuf,
                __attribute__((unused)) int type,
                __attribute__((unused)) struct FTW *ftwb)
{
  return remove (pathname);
}

int
main ()
{
  /* Create the temporary directory */
  char template[] = "/tmp/tmpdir.XXXXXX";
  char *tmp_dirname = mkdtemp (template);

  if (tmp_dirname == NULL)
  {
     perror ("tempdir: error: Could not create tmp directory");
     exit (EXIT_FAILURE);
  }

  /* Change directory */
  if (chdir (tmp_dirname) == -1)
  {
     perror ("tempdir: error: ");
     exit (EXIT_FAILURE);
  }

  /******************************/
  /***** Do your stuff here *****/
  /******************************/

  /* Delete the temporary directory */
  if (nftw (tmp_dirname, remove_callback, FOPEN_MAX,
            FTW_DEPTH | FTW_MOUNT | FTW_PHYS) == -1)
    {
      perror("tempdir: error: ");
      exit(EXIT_FAILURE);
    }

  return EXIT_SUCCESS;
}
于 2013-09-13T18:03:25.943 に答える