用标准C创建临时文件

来源:互联网 发布:网络防诈骗电话费骗局 编辑:程序博客网 时间:2024/05/29 12:58

/*
 g++ -ocreatetempfile createtempfile.cpp
 创建临时文件并写入数据。
 王军建
 2007-12-18
*/

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

bool createtempfile(void* buffer, int buffer_len, char* tempfilename)
{
 if (buffer==NULL || buffer_len<=0)
  return false;

 char* prefix = "wjj";
 char* tempfile = tempnam("/tmp", prefix);

 FILE* pFile;
 pFile = fopen(tempfile, "w+");
 if (pFile)
 {
  fwrite(buffer, 1, buffer_len, pFile);
  fclose(pFile);

  strcpy(tempfilename, tempfile);
  
  //注意:tempnam内部用了malloc来分配的内存,所以这里要调用free。
  //网上许多例子都没有调用,如果你在程序中频繁调用就出现内存泄漏。
  free(tempfile);
  return true;
 }

 return false;
}

int main()
{
 char tempfile[500];
 memset(tempfile, 0, sizeof(tempfile));

 char* data = "hello world!";
 if ( createtempfile(data, strlen(data), tempfile) )
 {
  printf("%s/n", tempfile);
  remove(tempfile);
 }

 return 0;
}

关于tempnam函数的定义
char *
 (const char *dir, const char *pfx)
{
  size_t len;
  register char *s;
  register char *t = __stdio_gen_tempname(dir, pfx, 1, &len, (FILE **) NULL);

  if (t == NULL)
    return NULL;

  s = (char *) malloc(len);
  if (s == NULL)
    return NULL;

  (void) memcpy(s, t, len);
  return s;
}

 

参考资料
http://www.nleymann.de/Nextstep/sources/tempnam.c