5.13 标准I/O库_临时文件

来源:互联网 发布:音乐打击垫软件 编辑:程序博客网 时间:2024/06/16 23:08

    ISO C标准I/O库提供了两个函数以帮助创建临时文件。

  • #include <stdio.h>
  • char *tmpnam(char *ptr);

返回值:指向唯一路径名的指针

  • FILE *tmpfile(void);

返回值:成功返回文件指针,出错返回NULL

tmpnam函数产生一个与现有文件名不同的一个有效路径名字符串。每次调用它时,它都产生一个不同的路径名,最多调用次数是TMP_MAX。TMP_MAX定义在<stdio.h>中。

    若ptr是NULL,则所产生的路径名存放在一个静态区中,指向该静态区的指针作为函数值返回。下一次在调用tmpnam时,会重写该静态区(这意味着,如果调用此函数多次,而且想保存路径名,则应当保存该路径名的副本,而不是指针的副本)。如若ptr不是NULL,则认为它指向长度至少是L_tmpnam个字符的数组(常量L_tmpnam定义在 <stdio.h>中)。所产生的路径名存放在该数组中,ptr也作为函数值返回。

    tmpfile创建一个临时二进制文件(类型wb+),在关闭该文件或程序结束时将自动删除这种文件。tmpfile函数经常使用的标准UNIX技术是先调用tmpnam产生一个唯一的路径名,然后,用该路径名创建一个文件,并立即unlink它。

 

  • #include <stdio.h>
  • char *tempnam(const char *directory, const char *prefix);

返回值:指向唯一路径名的指针

    tempnam是tmpnam的一个变体,它允许调用者为所产生的路径名指定目录和前缀。对于目录有4中不同的选择,按下列顺序判断其条件是否为真,并且使用第一个为真的作为目录:

  • 如果定义了环境变量TMPDIR,则用其作为目录。
  • 如果参数directory非NULL,则用其作为目录。
  • 将 <stdio.h>中的字符串P_tmpdir用作目录。
  • 将本地目录(通常是/tmp)用作目录。

    如果prefix非NULL,则它应该是最多包含5个字符的字符串,用其作为文件名的头几个字符。该函数调用malloc函数分配动态存储区,用其存放所构造的路径名。当不再使用此路径名时就可释放此存储区。

  • #include <stdio.h>
  • int mkstemp(char *template);

返回值:成功返回文件描述符,出错返回-1

    临时文件的名字使用template字符串参数选择的。如若mkstemp成功返回,它就会修改template字符串以反映临时文件的名字。

    与tempfile不同的是,mkstemp创建的临时文件不会自动被删除。如若想从文件系统名字空间中删除该文件,则需要自行unlink它。

    使用tmpnam和tempnam的一个不足之处是:在返回唯一路径名和应用程序用该路径名创建文件之间有一个时间窗口。在该时间窗口期间,另一个进程可能创建一个同名文件。tempfile和mkstemp函数则不会产生此种问题。

原创粉丝点击