如何在C中创build一个临时目录?

我正在试图创build一个临时目录来执行一些操作,然后在最后删除整个事情。 我在一个UNIX系统中使用C语言,所以我想要符合这个环境。

什么是编程这个最好的方法?

编辑我真的需要一个目录,而不仅仅是一个文件。 这个小程序是为了试验我是否可以执行项目的svn checkout 。 所以,它应该能够创build一个完整的文件和目录的层次结构。

我建议使用mkdtemp()函数以及来自C API( glibc )的常用函数。 这里是一个完整的答案:

 #define _POSIX_C_SOURCE 200809L #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <string.h> 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 */ char rm_command[26]; strncpy (rm_command, "rm -rf ", 7 + 1); strncat (rm_command, tmp_dirname, strlen (tmp_dirname) + 1); if (system (rm_command) == -1) { perror ("tempdir: error: "); exit (EXIT_FAILURE); } return EXIT_SUCCESS; } 

你应该使用mkdtemp函数。

 #define _POSIX_C_SOURCE 200809L #include <stdlib.h> #include <unistd.h> #include <stdio.h> int main() { char template[] = "/tmp/tmpdir.XXXXXX"; char *dir_name = mkdtemp(template); if(dir_name == NULL) { perror("mkdtemp failed: "); return 0; } /* Use it here */ printf("%s", dir_name); /* Don't forget to delete the folder afterwards. */ if(rmdir(dir_name) == -1) { perror("rmdir failed: "); return 0; } return 0; } 

之后不要忘记删除目录!

上面的答案不能很好地处理程序崩溃或死亡的情况。 该目录不会被删除。

当进程退出并停止引用目录时,操作系统最好删除该目录。

运行mkdtemp()后可以打开目录,然后立即执行一个目录的rm? 这样,只要我们打开它的目录正在使用,但是当我们关闭或退出,最后一个引用关闭并清除目录?

对于临时文件,我们有这个更简单:

 #include <stdio.h> FILE *tmpfile(void);