LINUX下建立临时文件: mkstemp

  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, 
0x00 sizeof (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, 
0x00 sizeof (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]

 

你可能感兴趣的:(linux,list,File,测试,null,FP)