下面的代码是每隔5s就重新生成一个以tmp_为开头的临时文件
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <unistd.h>
-
-
int main(int argc, char *argv[])
-
{
-
int fd;
-
-
while (1) {
-
char filename[] = "tmp_XXXXXX";
-
-
printf("make temp file ...\n");
-
fd = mkstemp(filename);
-
if (fd < 0) {
-
perror("mkstemp:");
-
exit(1);
-
}
-
-
printf("wait 5 seconds ...\n");
-
sleep(5);
-
-
-
printf("unlink file...\n");
-
unlink(filename);
-
close(fd);
-
}
-
-
return 0;
-
}
说明:
1. filename 必须定义成 char filename[] = "tmp_XXXXXX"; 即filename的值是可被改变的
而不能定义成 char *filename = "tmp_XXXXXX"; 因为定义 char *filename时,则filename 的内容是固定的不可变的,相当于const char *filename
但mkstemp 生成的文件名要必须以 XXXXXX 为结尾,这个6个数会被替换。
2.这里是通过while 来实现实循环生成,
char filename[] = "tmp_XXXXXX"; 不能放在 while 语句之外,
否则生成一个临时文件之后会报无效的数的错误,
这是因为生成了一个临时文件之后 filename 的值已被改变不是 tmp_XXXXXX了,
而是 tmp_加随机数据,再把这个filename 传给mkstemp时已不符合 filename 后6位必须是XXXXXX的要求了,所以提示无效参数的错误
阅读(1252) | 评论(0) | 转发(0) |