• Linux C创建临时文件mktemp, mkstemp


    mktemp 创建临时文件名

    创建一个独特的文件名,每次调用得到的文件名都不一样。

    注意:该函数只产生文件名,并不创建文件。

    #include <stdlib.h>
    
    char *mktemp(char *template);
    
    • 参数
      template 必须是一个字符数组,末尾6个字符必须是"XXXXXX",比如可以是"test-XXXXXX"(不含目录),或者"/tmp/test.XXXXXX"(含目录),而且不能是字符串常量。因为函数会改变template最后6个字符,返回最终文件名

    • 返回值
      返回的是得到的最终唯一文件名 。是否包含目录目,取决于输入参数template是否包含了目录。

    mktemp存在严重的安全风险,不建议使用,建议使用mkstemp。因为一些4.3BSD实现用当前进程ID和单个字母来替换 XXXXXX
    man mktemp(3)

    BUGS
    Never use mktemp(). Some implementations follow 4.3BSD and replace XXXXXX by
    the current process ID and a single letter, so that at most 26 different
    names can be returned. Since on the one hand the names are easy to guess,
    and on the other hand there is a race between testing whether the name exists
    and opening the file, every use of mktemp() is a security risk. The race is
    avoided by mkstemp(3).

    示例:

    char *tt = "test-XXXXXX";
    char template[256];
    char *s;
    
    strcpy(template, tt);
    s = mktemp(template);
    printf("template = %s, s = %s
    ", template, s);
    

    运行结果(每次产生的文件名都不一样):

    template = test-9ZTDNE, s = test-9ZTDNE
    

    mkstemp 创建临时文件

    每次调用,会创建一个临时文件,并且临时文件名唯一。

    #include <stdlib.h>
    
    int mkstemp(char *template);
    
    • 参数
      template 同mktemp,必须是字符数组,且以"XXXXXX"结尾,不能是字符串常量。

    • 返回值
      指向临时文件的文件描述符

    示例:

    char name[256] = "test.XXXXXX";
    int fd;
    if ((fd = mkstemp(name)) < 0) {
        perror("mktemp error");
        return -1;
    }
    
    strcpy(name, name);
    unlink(name); /* 进程结束后自动删除文件 */
    
    printf("%s
    ", name);
    char buf[256];
    strcpy(buf, "hello, world");
    if (write(fd, buf, strlen(buf)) < 0) {
        perror("write");
        return -1;
    }
    
    close(fd);
    

    运行结果(会在当前目录下产生临时文件,并且打印):

    test.5C0SaB
    
  • 相关阅读:
    vue2.0实践的一些细节
    数据库之一
    angularJS实用的开发技巧
    移动端开发的一些技巧总结(2)
    vue入门学习(基础篇)
    JS继承之原型继承
    css3动画
    使用 xlsx 前端解析 excel 文件
    webpack4 打包 library 遇到的坑
    roc-charts 开发笔记:JS广度优先查找无向无权图两点间最短路径
  • 原文地址:https://www.cnblogs.com/fortunely/p/15009966.html
Copyright © 2020-2023  润新知