man tmpnam tmpnam_r

名称

        tmpnam, tmpnam_r - 为临时文件创建名称

概要

        #include <stdio.h>

        char *tmpnam(char *s);

说明

        注意:应该避免使用tmpnam,请改用mkstemp或tmpfile。

        tmpnam返回一个指向字符串的指针,该字符串是一个有效的文件名,并且在某个

        时间点不存在同名的文件,因此天真的程序员可能认为临时文件适合使用该名字。

        如果参数s为 NULL,则此名称在内部静态缓冲区中生成,并且可能会被下一次调

        用tmpnam覆盖。如果参数s不为NULL,则将名称复制到s指向的字符数组(长

        度至少为L_tmpnam)中,且在成功时返回s。

        创建的路径名具有目录前缀P_tmpdir。(L_tmpnam和P_tmpdir都定义在<stdio.h>

        中,就像下文提到的TMP_MAX。)

返回值

        tmpnam返回一个指向唯一临时文件名的指针,如果无法生成唯一名称,则返回

        NULL。

错误

        没有定义错误。

线程安全特征

接口

特征

tmpnam()

线程安全

多线程不安全,竞争:tmpnam/!s

tmpnam_r()

线程安全

多线程安全

标准

        遵循SVr4, 4.3BSD, C89, C99, POSIX.1-2001。POSIX.1-2008将tmpnam标记为已过时。

注意

        每次调用tmpnam都会生成不同的字符串,最多TMP_MAX次。如果调用次数超过

        TMP_MAX次,则行为由具体实现定义。

        尽管tmpnam生成的名称难以猜测,但仍有可能在tmpnam返回路径名和程序打开

        它之间的这段时间,另一个程序使用open创建了该路径名,或者将其创建为符号

        链接。这可能会导致安全漏洞。为避免这种可能性,请使用open O_EXCL标志打开

        路径名,或者更好的办法是调用mkstemp或tmpfile。

        如果定义了_POSIX_THREADS或_POSIX_THREAD_SAFE_FUNCTIONS,则多线程应用程

        序不能使用NULL为参数调用tmpnam。

        POSIX草案提议使用tmpnam_r,定义如下, 

            char *

            tmpnam_r(char *s)

            {

                return s ? tmpnam(s) : NULL;

            }

        这显然是警告不要使用NULL。一些系统实现tmpnam_r,如果要从<stdio.h>获取此

        函数的glibc原型,请定义_SVID_SOURCE或_BSD_SOURCE(在包含任何头文件之前)。

BUGS

        永远不要使用该函数,改用mkstemp或tmpfile。

推荐阅读

        mkstemp,mktemp,tempnam,tmpfile

版本记录

        这个页面是Linux man-pages项目4.04版本的一部分。关于该项目的信息和bug报

        道可以在该网站找到:http://www.kernel.org/doc/man-pages/。

                                2015-03-02

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ta是一个搬运工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值