Linux环境之1_临时文件

来源:互联网 发布:淘宝卖家的货款在哪里 编辑:程序博客网 时间:2024/06/05 03:33

     在很多情况下,程序会利用一些文件形式的临时存储手段。这些临时文件可能保存着一个计算的中间结果,也可能是关键操作前的文件备份,例如,一个数据库应用程序在删除记录时就可能使用临时文件,该文件收集需要保留的数据库条目,然后在处理结束后,这个临时文件就变成新的数据库,原来文件则被删除。

    用tmpnam函数可以生成一个唯一的文件名:

        #include <stdio.h>

        char *tmpnam(char *s);

   tmpnam函数返回一个不与任何已存在文件同名的有效文件名。如果字符串s不为空,文件名也会写入它。对tmpnam的后续调用会覆盖存放返回值的静态存储区,如果需要立即使用临时文件的情况,你可以用tmpfile函数在给它命名的同时打开它。

     用tmpfile函数的原型:

           #include<stdio.h>

           FILE *tmpfile(void);

     tmpfile函数返回一个文件流指针,它指向一个唯一的临时文件。该文件以读写方式打开,当对它的所有引用全部关闭时,该文件会被自动删除。

tmpnam和tmpfile函数的用法:

#include <stdio.h>
#include <stdlib.h>
int main()
{
   char tmpname[L_tmpnam];
   char *filename;
   FILE *tmpfp;
   filename = tmpnam(tmpname);
   printf("Temporary file name is : %s\n",filename);
   tmpfp = tmpfile();
   if(tmpfp)
        printf("Opened a temporary file OK\n");
   else
        perror("tmpfile");
   exit(0);
}


运行结果:

zhangxm@zhangxm:~/c_programmer/Linux环境/dir_getpwuid$ ./tmpname
Temporary file name is : /tmp/fileL6uyra
Opened a temporary file OK

Linux也支持这两个函数,它们与tmpnam相似,不同之处在于可以为临时文件名指定一个模板,模板可以让你对文件大的存放位置和名字有更多的控制:

      #include<stdlib.h>

      char *mktemp(char *tmplate);

      int mkstemp(char *tmplate);

  mktemp函数以给定的模板为基础创建一个唯一的文件名。template参数必须是一个以6个x字符结尾的字符串。mktmp函数用有效的文件名字符的一个唯一组合来替换这些x字符。它返回一个指向生成的字符串的指针,如果不能生成一个唯一的名字,它就返回一个空指针。

   mkstemp函数类似于tmpfile,它也是同时创建并打开一个临时文件,文件名的生成方法和mktemp一样,但是它的返回值是一个打开的、底层的文件描述符。

0 0