Как следует из названия: могу ли я быть уверенным, что mktemp
будет существовать в любой операционной системе unix-y, с которой я, вероятно, столкнусь?
Насколько переносимым является mktemp (1)?
Ответ 1
POSIX, похоже, не указывает mktemp (1).
Похоже, что у большинства современных систем есть, но доступные функции и семантика опций различаются между реализациями (поэтому отдельные вызовы могут быть не переносимыми):
- mktemp (1) из OpenBSD - mktemp (1) создан в OpenBSD 2.1
- mktemp (1) из FreeBSD
- mktemp (1) из Mac OS X - почти всегда такая же, как у FreeBSD
- mktemp (1) от Todd C. Miller от славы sudo
- mktemp (1) из Solaris
- mktemp (1) из GNU coreutils
- mktemp (1) из HP/UX - этот, по-видимому, отличается от большинства других, перечисленных здесь.
Итак, если вы хотите портативное решение, вам, возможно, придется придерживаться функциональности и опций, которые означают одно и то же на всех интересующих вас платформах.
Ответ 2
Функция A mktemp
(AKA mktemp(3)
) впервые появилась в Unix V7, поэтому она, вероятно, будет всюду. Тем не менее, команда mktemp
(aka mktemp(1)
) впервые появилась, на мой взгляд, на OpenBSD 2.1, поэтому, если вам приходится иметь дело с действительно допотопными Unix-системами, вам, возможно, придется беспокоиться - если вы не можете распространять самую портативную mktemp.org (чтобы устранить потенциальную нехватку этой утилиты для какой-либо клиентской допотопной системы). Скорее всего, вам удастся встретить допотопную систему, мы, конечно, не можем догадаться, например, в HP-UX
, mktemp(1)
существует не менее 8 лет (даже большинство предприятий, возможно, обновили свою ОС Unix в рамках этого временные рамки), в Xenix я считаю, что он появился в 3.0 (в 1992 году) и т.д. и т.д.
Ответ 3
FYI, mktemp, похоже, НЕ включается в Solaris 9 (выпущен в 2002/2003 году) - только что прошел через это сегодня:
$ uname -a SunOS dcmnapp02 5.9 Generic_122300-47 sun4u sparc SUNW,Sun-Fire-V440 $ mktemp bash: mktemp: command not found $ man mktemp bash-2.05$ man mktemp Reformatting page. Please Wait... done Standard C Library Functions mktemp(3C) NAME mktemp - make a unique file name SYNOPSIS #include char *mktemp(char *template);
Ответ 4
В Solaris 9 он находится в пакете SMCmktemp, см. http://sunfreeware.com/indexsparc9.html:
uname -s
SunOS
uname -r
5.9
/usr/sbin/pkgchk -l -p/usr/local/bin/mktemp
Имя пути:/usr/local/bin/mktemp
Тип: обычный файл
Ожидаемый режим: 0555
Ожидаемый владелец: bin
Ожидаемая группа: bin
Ожидаемый размер файла (байты): 8884
Ожидаемая сумма (1): 6493
Ожидаемая последняя модификация: Nov 05 08:48:17 2002
Ссылка на следующие пакеты:
SMCmktemp
Текущий статус: установлен