15.15 临时文件
为了方便起见,我们偶尔会使用一个文件来临时保存数据。当程序结束时,这个文件便被删除,因为它所包含的数据不再有用。tmpfile函数就是用于这个目的:
FILE *tmpfile( void );
这个函数创建了一个文件,当文件被关闭或程序终止时,这个文件便自动删除。该文件以wb+模式打开,这使他可用于二进制和文本数据。如果临时文件必须以其他模式打开,或者由一个程序打开但由另一个程序读取,就不适合用tmpfile函数创建。在这些情况下必须使用fopen函数,而且当结果文件不再需要时,必须使用remove函数显式地删除。
临时文件的名字可以用tmpnam函数创建,它的原型如下:
char *tmpnam( char *name );
如果传递函数的参数为NULL,那么这个函数便返回一个指向静态数组的指针,该数组包含了被创建的文件名;否则,参数便假定是一个指向长度至少为L_tmpnam的字符数组的指针。在这种情况下,文件名在这个数据中创建,返回值就是这个参数。
无论那种情况,这个被创建的文件名保证不会与已经存在的文件名同名。只要调用次数不超过TMP_MAX,tmpnam函数每次调用时都能产生一个新的不同名字。
注意:这个用于保证唯一性的方法可能会在多程序系统(multiprogramming system)或那些共享一个网络文件服务器的系统中失败。问题的根源是名字被创建的时间和该名字所表示的文件被创建的时间这两者之间存在延迟。如果几个程序恰好都创建了一个相同的名字,并在任何文件被创建之前测试是否存在这个名字的文件,此时测试结果是否定的,于是每个程序都认为这是个唯一的名字。在文件名被创建之后立即创建文件可以减少(但不能根除)这种潜在的冲突。
C和指针 第15章 输入/输出函数 15.15 临时文件
于 2022-07-07 06:51:59 首次发布