c语言创建临时文件

创建名字唯一的临时文件:推荐使用tmpfile和mkstemp,因为这两个函数创建文件的同时并打开文件,总的来说安全又可靠。tmpfile返回的是文件流指针FILE*,mkstemp返回的是文件描述符。 

 

tmpnam,tmpfile


表头文件 #include <stdio.h>

函数定义 FILE *tmpfile(void);

函数描述 创建唯一的临时文件,并打开文件

返回值  成功返回文件流,失败返回NULL

 

表头文件 #include <stdio.h>

函数定义 char *tmpnam(char *s);

函数描述 创建唯一的临时文件

返回值  成功返回文件名字指针,失败返回NULL


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

int main()
{
    char tmpname[L_tmpnam];
    char *filename;
    FILE *tmpfp;

   
    if((filename = tmpnam(tmpname)) != NULL)    //方式一:不推荐使用
    {
     printf("Temporary file name is: %s\n", filename);
        printf("Temporary  tmpnam   is: %s\n", tmpname);//在一次打开中filename 与 tmpnam相同
   
        open(tmpname);
        perror("open");

        open(filename);
        perror("open");
    }

    tmpfp = tmpfile();  //方式二:推荐使用
    if(tmpfp)
        printf("Opened a temporary file OK\n");
    else
        perror("tmpfile");
 
    exit(0);
}

 

mktemp

用法与tmpnam差不多,只是名字部分可以由template确定,template后面六个字符必须为X,例如tmpXXXXXX


示例:

#include <stdlib.h>
#include <stdio.h>
//char *mktemp(char *template);

int main(int argc,char *argv[])
{
        char filename[] = "temp-XXXXXX";
        char *name;
        if((name = mktemp(filename)) == NULL)
        {
                perror("mktemp");
                exit(1);
        }

        printf("name:%s,filename:%s\n",name,filename);
        exit(0);
}

mkstemp(建立唯一的临时文件) 

 相关函数 mktemp 
 表头文件 #include<stdlib.h> 
 定义函数 int mkstemp(char * template); 
 函数说明 mkstemp()用来建立唯一的临时文件。参数template 所指的文件名
          称字符串中最后六个字符必须是XXXXXX。Mkstemp()会以可读写模式
           和0600 权限来打开该文件,如果该文件不存在则会建立该文件。打
           开该文件后其文件描述词会返回。文件顺利打开后返回可读写的文
件描述词。

若果文件打开失败则返回NULL,并把错误代码存在errno中。 

 错误代码 EINVAL 参数template 字符串最后六个字符非XXXXXX。EEXIST 无法
           建立临时文件。 
 附加说明 参数template所指的文件名称字符串必须声明为数组,如: 
           char template[ ] =”template-XXXXXX”; 
           千万不可以使用下列的表达方式 
           char *template = “template-XXXXXX”;

与mktemp函数区别:mkstemp返回值为文件描述符,mktemp返回值为文件名指针。

 

示例:

#include <stdlib.h>

int main(int argc,char *argv[])
{
        int fd;
        char tmpfile[] = "temp-XXXXXX";

        if((fd = mkstemp(tmpfile))< 0)
        {
                perror("mkstemp");
                exit(1);
        }

        close(fd);
        exit(0);
}


转自:http://blog.sina.com.cn/s/blog_63009a040100snyv.html

猜你喜欢

转载自blog.csdn.net/kk_01110001b/article/details/80561425
今日推荐