现在的位置: 首页 > 综合 > 正文

LINUX下建立临时文件: mkstemp

2013年10月22日 ⁄ 综合 ⁄ 共 2314字 ⁄ 字号 评论关闭

  LINUX下建立临时的方法(函数)有很多, mktemp, tmpfile等等. 今天只推荐最安全最好用的一种: mkstemp.

mkstemp (建立唯一临时文件)
头文件: #include 
<stdlib.h>

声明:  
int mkstemp(char *template)
返回值: 成功则返回0, 失败则返回
-1
.
说明:  建立唯一临时文件名, template须以数组形式声明而非指针形式. 
        template格式为: template.XXXXXX. 最后6位必须为XXXXXX, 前缀随意.

  上面简单介绍了mkstemp的函数定义, 下面是我写的测试代码.

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

#define LEN_FILE_NAME 256

#define TEMP_DIR "/home/daiweitao/Code/c/mkstemp/temp/"

#define AREA_LIST  'A'
#define GENRU_LIST 'B'

/* Make temparory file */
int mk_temp_file(char file[])
{
    
/* Return value */

    
int ret = 0;

    /* Make temp file */
    
if (mkstemp(file) < 0)
    {
        ret 
= -1
;
    }
    
else

    {
        printf(
"Temp file name: [%s] ", file);
    }

    return ret;
}

/* Generate genru list file */
int genru_list()
{
    
/* Return value */

    
int ret = 0;

    /* File pointer */
    FILE 
*fp = NULL;

    /* File name buffer */
    
char file[LEN_FILE_NAME];

    /* Init */
    memset(file, 
0x00sizeof(file));

    /* Set initial value (template) */
    strcpy(file, TEMP_DIR);
    strcat(file, 
"cutman.genru.XXXXXX");

    /* TEMP */
    
if (mk_temp_file(file) < 0)
    {
        perror(
"mkstemp"
);
        ret 
= -1
;
    }
    
else

    {
        
if ((fp = fopen(file, "w")) == NULL)
        {
            perror(
"fopen"
);
            ret 
= -2
;
        }
    }

    fclose(fp);

    return ret;
}

/* Generate area list file */
int area_list()
{
    
/* Return value */

    
int ret = 0;

    /* File pointer */
    FILE 
*fp = NULL;

    /* File name buffer */
    
char file[LEN_FILE_NAME];

    /* Init */
    memset(file, 
0x00sizeof(file));

    /* Set initial value (template) */
    strcpy(file, TEMP_DIR);
    strcat(file, 
"cutman.area.XXXXXX");

    /* TEMP */
    
if (mk_temp_file(file) < 0)
    {
        perror(
"mkstemp"
);
        ret 
= -1
;
    }
    
else

    {
        
if ((fp = fopen(file, "w")) == NULL)
        {
            perror(
"fopen"
);
            ret 
= -2
;
        }
    }

    fclose(fp);

    return ret;
}

int cutman(char c)
{
    
/* Return value */

    
int ret = 0;

    switch (c)
    {
    
case
 AREA_LIST:
        ret 
=
 area_list();
        
break
;
    
case
 GENRU_LIST:
        ret 
=
 genru_list();
        
break
;
    
default
:
        printf(
"Operation type error "
);
        
break
;
    }

    return ret;
}

int main()
{
    
return
 cutman(AREA_LIST);
}

执行结果:

$ ./a.out 
Temp file name: [
/home/daiweitao/Code/c/mkstemp/temp/cutman.area.bGbabc]

 

抱歉!评论已关闭.