讲师博文
函数tmpnam和tmpfile的用法 来源 : 未知     2018-09-21

标准I / O库提供了两个函数以帮助创建临时文件,第一个函数为tmpnam。

#include <stdio.h>

char *tmpnam(char *s);

tmpnam()产生一个与现在文件名不同的一个有效路径名字符串。每次调用它时,它都产生一个不同的路径名。多调用次数为TMP_MAX。

tmpnam()的s如果为NULL,则返回值存放到一个静态的区中。如果s不为NULL,则认为其指向长度至少为L_tmpnam个数的字符数组中。所产生的文件名存放到该数组中,也作为函数返回值返回。

tmpnam产生的文件名,在文件系统中一定不存在,因此,程序员可以创建临时文件,进行后续编程。示例代码如下:

#include <stdio.h>

#define N 128

int main() {

char s[N] = {0}, *p;

if ((p = tmpnam(s)) == NULL) {

perror("tmpnam");

return -1;

}

printf("s=%s p=%s\n", s, p);

return 0;

}

程序执行结果如下:

函数tmpnam和tmpfile的用法

tmpfile函数原型如下:

#include <stdio.h>

FILE *tmpfile(void);

创建的临时文件在程序退出时会被自动删除。

#include <stdio.h>

#define N 128

int main() {

char s[N] = {0}, *p;

FILE * fp;

int ch = 0;

if ((p = tmpnam(s)) == NULL) {

perror("tmpnam");

return -1;

}

printf("s=%s p=%s\n", s, p);

printf("TMP_MAX=%d\n", TMP_MAX);

if ((fp = tmpfile()) == NULL) {

perror("tmpfile");

return -1;

}

f (fputc('a', fp) == EOF) {

perror("fputc");

return -1;

}

fseek(fp, 0, SEEK_SET);

ch = fgetc(fp);

printf("ch=%d\n",ch);

getchar();

puts("end main");

fclose(fp);

ch = fgetc(fp);

printf("ch=%d\n",ch);

return 0;

}

程序执行结果如下:

函数tmpnam和tmpfile的用法

在getchar函数执行前,可以新开一个命令窗口,来查看进程占用的文件描述符,看到了/tmp下的临时文件,并被系统做了deleted标记。从/tmp目录下,也找不到这个临时文件。但是这个文件在内存中是存在的(Linux系统规定,一个文件如果有连接计数器不为0,或者其进程打开数不为0,均不会删除其文件内容)。

函数tmpnam和tmpfile的用法

另外,自己实现一个tmpfile()函数,也非常简单,步骤如下:

先调用tmpnam()产生一个唯一的路径名。

调用fopen()打开。

调用unlink()删除。

说明:利用这个特点来实现tmpfile()。

扫码申领本地嵌入式教学实录全套视频及配套源码

上一篇:Linux下printf输出字符串的颜色

下一篇:不定参函数

400-611-6270

Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号