mktemp(1)的可移植性如何?

Dav*_*ver 25 shell portability

正如标题所示 - 我可以合理地确定mktemp在我可能会遇到的任何unix-y操作系统上都会存在吗?

Chr*_*sen 19

POSIX似乎没有指定mktemp(1).

看起来大多数现代系统都有它,但是可用的功能和选项的语义因实现而异(因此特定的调用可能不可移植):

因此,如果您需要便携式解决方案,您可能需要坚持在所有感兴趣的平台上使用相同功能的选项.

  • `mktemp` @TafT 寻址的是 C 库函数,而询问的 `mktemp` OP 是命令行程序。 (2认同)
  • @TafT那种.但它并不那么薄.gnu coreutils中的`mktemp.c`是350行:http://lingrok.org/xref/coreutils/src/mktemp.c.实际上它看起来不像是调用`mktemp(3)`而是使用一些gnulib函数(不是glibc)来实现它自己的逻辑,而它唯一的系统调用就是`open`. (2认同)

Ale*_*lli 5

一个mktemp 函数(AKA mktemp(3))首次出现在Unix的V7所以它很可能是无处不在.但是,我相信,在OpenBSD 2.1上首次出现了一个mktemp 命令(又名mktemp(1)),所以如果你必须处理真正的antediluvian Unix系统,你可能不得不担心 - 除非你能分发非常便携的mktemp.org版本(以修复某些客户的前期系统可能缺乏此实用程序).怎么可能是你遇到的老古董系统是几乎不可能让我们猜测,当然-例如在HP-UX,mktemp(1)已经有至少8年(甚至大部分企业可能已经在这一时限内更新了自己的Unix操作系统的),在Xenix的我相信它出现在3.0(1992年)等等.


Myk*_*naC 5

仅供参考,mktemp 似乎不包含在 Solaris 9(2002/2003 年发布)中 - 今天刚遇到这个:

$ uname -a
SunOS dcmnapp02 5.9 Generic_122300-47 sun4u sparc SUNW,Sun-Fire-V440
$ mktemp
bash: mktemp: 命令未找到
$ man mktemp
bash-2.05$ 人 mktemp
重新格式化页面。请稍等...完成

标准 C 库函数 mktemp(3C)

姓名
     mktemp - 创建一个唯一的文件名

概要
     #包括 

     字符 *mktemp(字符 *模板);

  • 是的,Solaris 10 是第一个在操作系统中包含 mktemp(1) 命令的 Solaris 发行版。 (2认同)