mkstemp函数应用

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

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


以下是测试代码: 

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




#define  LEN_FILE_NAME  256


#define  TEMP_DIR       "/home/sujp/temp/"


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


/* Make temparory file */
int mk_temp_file(char file[])
{
int ret = 0;  /* return value */
printf("the file name: %s \n", file);
if (mkstemp(file) < 0)
ret = -1;
else  
printf("Temp file name: [%s] \n", file);

return ret;
}


/* Generate genru list file */
int genru_list()
{
int ret = 0;  /* return value */
FILE *fp = NULL; /* file pointer */
char file[LEN_FILE_NAME];

memset(file, 0x00, sizeof(file));
    strcpy(file, TEMP_DIR);
    strcat(file,"sujp.genru.XXXXXX"); /* Set initial value (template) */
    
    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;
}


/* genrate area list file */
int area_list()
{
 int ret = 0;
 FILE *fp = NULL;
 char file[LEN_FILE_NAME];
 
 memset(file, 0x00, sizeof(file)); /* 将file数组中的每个字节全部格式化为十六进制 */
 
 strcpy(file, TEMP_DIR);           /* 将TEMP_DIR的内容复制到file中接到file内容后面 */
 strcat(file, "sujp.area.XXXXXX");  /* 将目录与文件名接起来 */
  
 if (mk_temp_file(file) < 0) {     /* 返回的file为新生成的文件名  */
   perror("mkstemp");
   ret = -1;
 }
 else {
   printf("program is running there.\n");  /* test program */
   printf("the file name: %s \n", file);   /* 测试返回的新数组内容 */
   if ((fp = fopen(file, "w")) == NULL) {      
     perror("fopen");
     ret = -2;
   }
 }
 printf("return fp is %p\n", fp);            /* 测试返回的文件指针地址 */
 fclose(fp);
 
 return ret;
}


int cutman(char c)
{
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'参数 */
}

 
 
     















 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值