分享

在linux下使用c语言操作临时文件

 jijo 2008-10-13



  • temp_file_handle write_temp_file (char* buffer, size_t length)
    {
    /* Create the filename and file. The XXXXXX will be replaced with
     characters that make the filename unique. */
    /*新建文件名和文件,文件名中的XXXXXX将被随机字符串代替,以保证文件名在系统中的唯一性*/

     char temp_filename[] = “/tmp/temp_file.XXXXXX”;
     int fd = mkstemp (temp_filename);
     /* Unlink the file immediately, so that it will be removed when the
     file descriptor is closed. */
     /*文件立刻被unlink,这样只要文件描述符一关闭文件就会被自动删除*/

     unlink (temp_filename);
     /* Write the number of bytes to the file first. */
     /*首先写入即将写入数据的长度*/

     write (fd, &length, sizeof (length));
     /* Now write the data itself. */
     /*写入数据本身*/
     write (fd, buffer, length);
     /* Use the file descriptor as the handle for the temporary file. */
     /*函数返回文件描述符,作为临时文件的句柄*/

     return fd;
    }
    /* Reads the contents of a temporary file TEMP_FILE created with
    write_temp_file. The return value is a newly allocated buffer of
    those contents, which the caller must deallocate with free.
    *LENGTH is set to the size of the contents, in bytes. The
    temporary file is removed. */
    /*从被write_temp_file创建的临时文件中读取数据。返回值是含有文件内容的新申请到的内存块,这块内存应该又调用read_temp_file者释放。

    *length是临时文件正文内容的长度。执行完read_temp_file函数后临时文件被彻底删除*/
    char* read_temp_file (temp_file_handle temp_file, size_t* length)
    {
     char* buffer;
     /* The TEMP_FILE handle is a file descriptor to the temporary file. */
     /*fd是访问临时文件的文件描述符*/

     int fd = temp_file;
     /* Rewind to the beginning of the file. */
     /*把文件指针指向文件开头*/

     lseek (fd, 0, SEEK_SET);
     /* Read the size of the data in the temporary file. */
     /*获得临时文件正文长度*/

     read (fd, length, sizeof (*length));
     /* Allocate a buffer and read the data. */
     /*分配内存块,读取数据*/

     buffer = (char*) malloc (*length);
     read (fd, buffer, *length);
     /* Close the file descriptor, which will cause the temporary file to
     go away. */
     /*关闭文件描述符,临时文件被彻底删除*/

     close (fd);
     return buffer;
    }


    tmpfile函数
        如果您使用C library I/O函数,并且并没有另一个程序使用这个临时文件(笔者注:按我的理解是在同一进程或具有父子关系的进程组中),有个更简洁的函数——tmpfile。tmpfile函数创建并打开一个临时文件,并且自动执行了unlink了这个临时文件。tmpfile函数返回一个文件描述符,如果执行失败返回NULL。当程序执行了fclose或者退出时,资源被释放。
        linux系统中还提供mktemp、 tmpnam、 和tempnam等函数,但是由于健壮性和安全方面理由不建议使用他们。
    • 本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
      转藏 分享 献花(0

      0条评论

      发表

      请遵守用户 评论公约

      类似文章 更多