tempnam

TEMPNAM(3)      Ð ÑководÑÑво пÑогÑаммиÑÑа Linux      TEMPNAM(3)



ÐÐЯ
       tempnam - ÑоздаÑÑ Ð¸Ð¼Ñ Ð´Ð»Ñ Ð²Ñеменного Ñайла

ÐÐÐÐÐ
       #include <stdio.h>

       char *tempnam(const char *dir, const char *pfx);

   ТÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð°ÐºÑоÑа ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑÑв Ð´Ð»Ñ glibc
   (Ñм. feature_test_macros(7)):

       tempnam():
           наÑÐ¸Ð½Ð°Ñ Ñ glibc 2.19:
               _DEFAULT_SOURCE
           в glibc 2.19 и ÑÑаÑее:
               _BSD_SOURCE || _SVID_SOURCE

ÐÐÐСÐÐÐÐ
       Ðикогда не иÑполÑзÑйÑе ÑÑÑ ÑÑнкÑиÑ. ÐмеÑÑо неÑ
       иÑполÑзÑйÑе mkstemp(3) или tmpfile(3).

       ФÑнкÑÐ¸Ñ tempnam() возвÑаÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑÑокÑ,
       коÑоÑÐ°Ñ ÑвлÑеÑÑÑ Ð´Ð¾Ð¿ÑÑÑимÑм именем Ñайла и
       пÑи ÑÑом Ñайл Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñм именем на моменÑ
       пÑовеÑки tempnam() не ÑÑÑеÑÑвÑеÑ. СÑÑÑикÑ
       ÑгенеÑиÑованного имени Ñайла бÑдеÑ
       наÑинаÑÑÑÑ Ñ pfx (пÑи ÑÑловии, ÑÑо pfx â не
       NULL-ÑÑÑока и ÑодеÑÐ¶Ð¸Ñ Ð½Ðµ менее пÑÑи байÑ).
       Также необÑодимо, ÑÑÐ¾Ð±Ñ Ð¿ÑеÑикÑ, ÑоÑÑоÑÑий из
       имÑн каÑалогов полного имени Ñайла, бÑл
       «ÑелеÑообÑазнÑм» (ÑаÑе вÑего ÑÑо
       подÑазÑмеваеÑ, как минимÑм, доÑÑÑпноÑÑÑ Ð½Ð°
       запиÑÑ).

       ÐопÑÑка найÑи подÑодÑÑий каÑалог делиÑÑÑ Ð½Ð°
       ÑледÑÑÑие Ñаги:

       1. ÐÑли ÑÑÑеÑÑвÑÐµÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ TMPDIR,
          коÑоÑÐ°Ñ ÑодеÑÐ¶Ð¸Ñ Ð¿Ð¾Ð´ÑодÑÑий каÑалог, Ñо
          иÑполÑзÑеÑÑÑ Ð¾Ð½Ð°.

       2. ÐнаÑе, еÑли аÑгÑÐ¼ÐµÐ½Ñ dir не ÑвлÑеÑÑÑ NULL и
          подÑодÑÑий, Ñо иÑполÑзÑеÑÑÑ Ð¾Ð½.

       3. ÐнаÑе иÑполÑзÑеÑÑÑ P_tmpdir (опиÑана в <stdio.h>),
          еÑли она подÑодиÑ.

       4. Ð, наконеÑ, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзован
          каÑалог, опÑеделÑннÑй ÑеализаÑией
          ÑÑнкÑии.

       ÐамÑÑÑ Ð¿Ð¾Ð´ ÑÑÑокÑ, возвÑаÑаемÑÑ tempnam(),
       вÑделÑеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ malloc(3) и в поÑледÑÑвии
       должна бÑÑÑ Ð¾Ñвобождена Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ free(3).

ÐÐÐÐÐ ÐЩÐÐÐÐÐ ÐÐÐЧÐÐÐÐ
       ÐÑи ÑÑпеÑном вÑполнении ÑÑнкÑÐ¸Ñ tempnam()
       возвÑаÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑникалÑное имÑ
       вÑеменного Ñайла. Ðна возвÑаÑÐ°ÐµÑ NULL, еÑли
       его невозможно ÑгенеÑиÑоваÑÑ Ð¸ запиÑÑваеÑ
       в errno Ð½Ð¾Ð¼ÐµÑ Ð¾Ñибки.

ÐШÐÐÐÐ
       ENOMEM Ðе ÑдалоÑÑ Ð²ÑделиÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð´Ð»Ñ ÑÑÑоки.

ÐТРÐÐУТЫ
       ÐпиÑание ÑеÑминов данного Ñаздела ÑмоÑÑиÑе
       в attributes(7).

       ┌──────────────┬────────────────────────────────┬────────────────┐
       │ÐнÑеÑÑÐµÐ¹Ñ ÐÑÑибÑÑ                      ÐнаÑение │
       ├──────────────┼────────────────────────────────┼────────────────┤
       │tempnam()     │ ÐезвÑедноÑÑÑ Ð² ниÑÑÑ │ MT-Safe env    │
       └──────────────┴────────────────────────────────┴────────────────┘
СÐÐТÐÐТСТÐÐРСТÐÐÐÐРТÐÐ
       SVr4, 4.3BSD, POSIX.1-2001. Ð POSIX.1-2008 ÑÑнкÑÐ¸Ñ tempnam()
       оÑмеÑена как ÑÑÑаÑевÑаÑ.

ÐÐÐÐЧÐÐÐЯ
       ХоÑÑ tempnam() генеÑиÑÑÐµÑ Ð¸Ð¼ÐµÐ½Ð°, коÑоÑÑе ÑÑÑдно
       подобÑаÑÑ, Ñем не менее, еÑÑÑ Ð²ÐµÑоÑÑноÑÑÑ, ÑÑо
       за пÑомежÑÑок вÑемени, когда tempnam() веÑнÑÑ
       Ð¸Ð¼Ñ Ñайла и пÑогÑамма оÑкÑÐ¾ÐµÑ ÐµÐ³Ð¾, дÑÑгаÑ
       пÑогÑамма ÑÑÐ¿ÐµÐµÑ ÑоздаÑÑ Ñакое же Ð¸Ð¼Ñ Ñ
       помоÑÑÑ open(2) или ÑоздаÑÑ ÑимволиÑеÑкÑÑ ÑÑÑлкÑ,
       ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к пÑоблемам
       безопаÑноÑÑи. ЧÑÐ¾Ð±Ñ Ð¸ÑклÑÑиÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ
       веÑоÑÑноÑÑÑ, Ð´Ð»Ñ Ð¾ÑкÑÑÑÐ¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ñайла
       иÑполÑзÑйÑе open(2) Ñ Ñлагом O_EXCL. РеÑÑ Ð»ÑÑÑе —
       воÑполÑзÑйÑеÑÑ mkstemp(3) или tmpfile(3).

       Ð SUSv2 не ÑпоминаеÑÑÑ Ð¸ÑполÑзование TMPDIR; в
       glibc она бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко в Ñом
       ÑлÑÑае, еÑли Ñ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð½Ðµ ÑÑÑановлен биÑ
       set-user-ID. Ð SVr4, иÑполÑзÑемÑй каÑалог Ð´Ð»Ñ ÑлÑÑаÑ
       4. /tmp (как и Ð´Ð»Ñ glibc).

       Так как tempnam() динамиÑеÑки вÑделÑÐµÑ Ð¿Ð°Ð¼ÑÑÑ
       под возвÑаÑаемое Ð¸Ð¼Ñ Ñайла, Ñо она ÑвлÑеÑÑÑ
       ÑеенÑеÑабелÑной и, ÑледоваÑелÑно,
       безопаÑной пÑи иÑполÑзовании ниÑей (в
       оÑлиÑие Ð¾Ñ tmpnam(3)).

       ФÑнкÑÐ¸Ñ tempnam() генеÑиÑÑÐµÑ ÑникалÑное имÑ
       каждÑй Ñаз, пока не доÑÑÐ¸Ð³Ð½ÐµÑ Ð¿Ñедела TMP_MAX
       (опÑеделÑнного в <stdio.h>). ÐÑли она бÑдеÑ
       вÑзвана более Ñем TMP_MAX Ñаз, Ñо далÑнейÑее
       поведение опÑеделÑеÑÑÑ ÐºÐ¾Ð½ÐºÑеÑной
       ÑеализаÑией.

       tempnam() иÑполÑзÑÐµÑ Ð¿Ð¾ кÑайней меÑе пеÑвÑе пÑÑÑ
       Ð±Ð°Ð¹Ñ Ð¸Ð· pfx.

       РеализаÑÐ¸Ñ tempnam() из glibc завеÑÑиÑÑÑ Ñ Ð¾Ñибкой
       EEXIST, еÑли не ÑÐ¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð¹Ñи ÑникалÑное имÑ.

ÐÐФÐÐТЫ
       ТоÑного опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Â«ÑелеÑообÑазноÑÑи» не
       ÑÑÑеÑÑвÑеÑ. Ðе опÑеделено, каким обÑазом
       должна опÑеделÑÑÑÑÑ Ð´Ð¾ÑÑÑпноÑÑÑ ÐºÐ°Ñалога.

СÐÐТРÐТРТÐÐÐÐ
       mkstemp(3), mktemp(3), tmpfile(3), tmpnam(3)



                                  2016-03-15                        TEMPNAM(3)