linux中_临时文件接口tmpfile函数和mkstemp函数的使用

linux下临时文件使用总结

临时文件的创建建议使用推荐函数tmpfile()mkstemp()。临时文件的读写操作和普通文件的操作一样,都是调用write()read()fwrite()等系统接口。下面是相关的函数接口说明。

临时文件相关的系统宏(在stdio.h,stdlib.h中):

  1. P_tmpdir系统宏:指定临时文件存放的目录位置,默认为/temp
  2. TMP_MAX系统宏,系统最少可以创建的临时文件名的数量。
  3. L_tmpnam系统宏:使用tmpnam()等函数时会涉及。表示存放字符串buff的最小大小。

临时文件推荐使用的系统函数接口:

  1. FILE *tmpfile(void)
    1. 需要包含stdio.h
    2. 描述:以wb+模式创建临时文件。被创建的临时文件会在流关闭时或程序终止时自动删除。它是多线程安全的。
    3. return: 成功返回文件指针,失败返回NULL.
    4. 其他:glibc库中,使用P_tmpdir宏来指定临时文件的目录位置,默认为/temp
  2. int mkstemp(char *template)
    1. 需要包含stdlib.h
    2. 描述:生成一个临时的、独一无二的文件名。并使用open()打开(打开时的权限为0600),然后返回其文件描述符。
    3. template:用来保存要生成的文件名字符串的数组指针。其中数组格式必须为:anycharXXXXXX.最后6位必须为XXXXXX, 前缀随意.
    4. 成功返回文件描述符,失败返回-1.

一些不建议使用的系统函数接口:

  1. char *tmpnam(char *s)
    1. 描述:生成一个临时的、独一无二的文件名。
    2. s:要保存文件名的数组指针。数组长度至少为L_tmpnam.也可以使s为NULL,这是tmpnam()会返回一个内部的数组指针。不过此函数现在不建议使用。因为它在多线程下不安全。建议使用mkstemp()代替。
    3. 返回指向文件名的字符串指针。也就是当s!=NULL时,为s指针,当s=NULL时,为函数内部的静态数组指针。
  2. char *tmpnam_r(char *s)
    1. 描述:类似tmpnam(),只不过不允许s=NULL.
  3. char *mktemp(char *template)
    1. 描述:功能类似mkstemp.有bug,不建议使用。

例程如下:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

void main(void)
{
    FILE *fp;
    char buff[64] = "guoweilkd";
    char readbuff[64];
    /* 1. tmpfile()使用 */
    fp = tmpfile();
    fwrite(buff,sizeof(buff),1,fp);
    fseek(fp,0,0);
    fread(readbuff,sizeof(buff),1,fp);
    printf("tmpfile read:%s\n",readbuff);
    fclose(fp);

    /* 1. mkstemp()使用 */
    char filename[64] = "guoweilkdXXXXXX";
    int fd = mkstemp(filename);
    printf("fd=%d,file name is:%s\n",fd,filename);
    write(fd,buff,sizeof(buff));
    read(fd,readbuff,sizeof(readbuff));
    printf("mkstemp read:%s\n",readbuff);
    close(fd);
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theboynoName

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值