MKSTEMP - Linux手册页
Linux程序员手册 第3部分
更新日期: 2017-09-15
名称
mkstemp,mkostemp,mkstemps,mkostemps-创建一个唯一的临时文件
语法
#include <stdlib.h> int mkstemp(char *template); int mkostemp(char *template, int flags); int mkstemps(char *template, int suffixlen); int mkostemps(char *template, int suffixlen, int flags);
glibc的功能测试宏要求(请参阅feature_test_macros(7)):
mkstemp():
- _XOPEN_SOURCE>= 500 || / *自glibc 2.12起:* / _POSIX_C_SOURCE>= 200809L || / * Glibc版本
mkostemp():_ GNU_SOURCE
mkstemps():
/ * Glibc自2.19起:* / -_DEFAULT_SOURCE
|| / * Glibc版本
说明
mkstemp()函数从模板生成唯一的临时文件名,创建并打开文件,并返回该文件的打开文件描述符。
模板的最后六个字符必须为" XXXXXX",并用使文件名唯一的字符串替换。由于将对其进行修改,因此模板不能为字符串常量,而应声明为字符数组。
创建的文件具有权限0600,即,仅所有者拥有读写权限。返回的文件描述符提供对文件的读写访问。使用open(2)O_EXCL标志打开文件,从而确保调用者是创建文件的进程。
mkostemp()函数类似于mkstemp(),不同之处在于可以在标志中指定以下位-与open(2)的含义相同-O_APPEND,O_CLOEXEC和O_SYNC。请注意,在创建文件时,mkostemp()在给open(2)的flags参数中包含值O_RDWR,O_CREAT和O_EXCL。将这些值包含在给mkostemp()的flags参数中是不必要的,并且在某些系统上会产生错误。
mkstemps()函数类似于mkstemp(),不同之处在于模板中的字符串包含后缀字符后缀。因此,模板的形式为前缀XXXXXX后缀,并且字符串XXXXXX与mkstemp()一样被修改。
mkostemps()函数用于mkstemps(),mkostemp()函数用于mkstemp()。
返回值
成功执行后,这些函数将返回临时文件的文件描述符。如果出错,则返回-1,并正确设置errno。
错误说明
- EEXIST
- 无法创建唯一的临时文件名。现在,模板的内容是不确定的。
- EINVAL
- 对于mkstemp()和mkostemp():模板的最后六个字符不是XXXXXX;现在模板不变。
- 对于mkstemps()和mkostemps():模板的长度少于(6 +后缀)个字符,或者模板中后缀之前的最后6个字符不是XXXXXX。
这些功能也可能因open(2)描述的任何错误而失败。
版本
从glibc 2.7开始,mkostemp()可用。从glibc 2.11开始,可以使用mkstemps()和mkostemps()。
属性
有关本节中使用的术语的说明,请参见attribute(7)。
Interface | Attribute | Value |
mkstemp(),mkostemp(), mkstemps(),mkostemps() | Thread safety | MT-Safe |
遵循规范
mkstemp():4.3BSD,POSIX.1-2001。
mkstemps():未标准化,但出现在其他几个系统上。
mkostemp()和mkostemps():是glibc扩展。
备注
在glibc 2.06和更早版本中,该文件的创建权限为0666,即对所有用户读写。这种旧的行为可能会带来安全风险,尤其是由于其他UNIX版本使用0600时,移植程序时可能会忽略此细节。 POSIX.1-2008添加了使用模式0600创建文件的要求。
更一般而言,mkstemp()的POSIX规范没有说明任何文件模式,因此应用程序应确保在调用mkstemp()(和mkostemp())之前已正确设置其文件模式创建掩码(请参见umask(2))。 。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。