临时文件 通常,程序需要以文件的形式使用临时存储。这也许是存储计算的中间结果,或者是在实际操作之前所做的文件拷贝备份。例如,一个数据程序在删除记录时会使用临时文件。文件会收集需要保存的数据库实体,然后在操作结束时,临时文件会成为新的数据库而原始的会被删除。 临时文件的大量使用隐藏了他的一个缺点。我们必须小心来确保程序会选择一个唯一的名字来使用临时文件。如果不是这样,因为Linux是一个多任务系统,也许会有另一个程序选择了相同的名字,而这两个彼此之间会相互影响。 一个唯一的临时文件名可以由tmpnam函数生成: #include char *tmpnam(char *s); tmpnam 函数会返回一个与现存的文件不同的可用的文件名。如果字符串不为null,文件名也就会被写入其中。后续的tmpnam函数调用会覆盖返回值所用的表态存 储区,所以如果tmpnam函数被调用多次,实际上是使用一个字符串参数。这个字符串假定至少为L_tmpnam字符长。一个程序中,tmpnam至多可 以被调用TMP_MAX次,而且每次都会生成一个不同的文件名。 如果临时文件被立即使用,那么我们可以同时使用tmpfile函数来对其命名并且打开。这一点很重要,因为另一个程序会使用tmpnam返回的相同的名字创建一个文件。tmpfile函数避免这种情况的发生: #include FILE *tmpfile(void); tmpfile函数会返回一个指向唯一的临时文件的流指针。这个文件会为读和写打开,而且在所有到文件的引用被关闭以后,这个文件会被自动删除。 如果发生错误,tmpfile会返回一个空指针,并且设置errno变量。 试验--tmpnam与tmpfile 下面让我们实际的看一下这两个函数的使用: #include int main() { char tmpname[L_tmpnam]; char *filename; FILE *tmpfp; filename = tmpnam(tmpname); printf(“Temporary file name is: |