Doug McIlroy <d...@cs.dartmouth.edu> wrote:
 |I must be missing something in the discussion about random
 |numbers. Why does groff need them? In the offered example
 |    tmp="$d/eqn2graph$groff_rand"
 |the "random number" serves only to make a (supposedly) unique
 |name. But of course, if the number is truly random, it is not
 |guaranteed to be unique. Why does groff not use the time-honored
 |$$ to serve the purpose?  The only requirement for an absolute
 |guarantee of uniqueness is that the shell script whose pid $$
 |represents lives as long as the temporary file.

POSIX also loomed some notes on temporary files in the shell [1]:

  Having a function like tmpnam( ) in the ISO C standard is
  important in many high-level languages. The shell programming
  language, however, has built-in string manipulation facilities,
  making it very easy to construct temporary filenames. The names
  needed obviously depend on the application, but are frequently
  of a form similar to:

  $TMPDIR/application_abbreviation$$.suffix

  In cases where there is likely to be contention for a given
  suffix, a simple shell for or while loop can be used with the
  shell noclobber option to create a file without risk of
  collisions, as long as applications trying to use the same
  filename name space are cooperating on the use of files after
  they have been created.

  [1] <http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pathchk.html>

--steffen

Reply via email to