[devel] temporary file handling: questions
Grigory Batalov
=?iso-8859-1?q?bga_=CE=C1_altlinux=2Eru?=
Ср Июн 11 03:14:59 MSD 2003
On Tue, 3 Jun 2003 12:17:29 +0400
"Dmitry V. Levin" <ldv на altlinux.org> wrote:
> #define _GNU_SOURCE
>
> #include <stdio.h>
> #include <error.h>
> #include <errno.h>
> #include <stdlib.h>
> #include <unistd.h>
>
> ...
> char *fname;
> int fd;
> FILE *fp;
>
> if (asprintf (&fname, "%s/progname.XXXXXX", getenv ("TMPDIR") ?: P_tmpdir) < 0)
> error (EXIT_FAILURE, errno, "asprintf");
>
> if ((fd = mkstemp (fname)) < 0)
> error (EXIT_FAILURE, errno, "mkstemp: %s", fname);
>
> if (unlink (fname) < 0)
> error (EXIT_FAILURE, errno, "unlink: %s", fname);
>
> if ((fp = fdopen (fd, "w+")) == NULL)
> error (EXIT_FAILURE, errno, "fdopen: %s", fname);
>
> ...
>
> if (fclose (fp))
> error (EXIT_FAILURE, errno, "fclose: %s", fname);
>
> free (fname);
> fname = NULL;
>
> Комментарии приветствуются.
Если я правильно понимаю, fdopen/fclose используются, чтобы
"занять" файловый дескриптор потоком и предотвратить
немедленное удаление функцией unlink?
Или fdopen/fclose приведены для примера потокового
ввода/вывода, и их можно опустить (например, мне достаточно
open/close)? В этом случае "оттягивать до последнего"
нужно вызов close(fd) ?
Подробная информация о списке рассылки Devel