MKSTEMP - Linux手册页

时间:2019-08-20 18:00:53  来源:igfitidea点击:

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)。

InterfaceAttributeValue
mkstemp(),mkostemp(),
mkstemps(),mkostemps()
Thread safetyMT-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))。 。

另外参见

mkdtemp(3),mktemp(3),tempnam(3),tmpfile(3),tmpnam(3)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/