ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] I: temporary file handling: C coding guideline
@ 2003-06-03  8:17 Dmitry V. Levin
  2003-06-03  9:15 ` Stanislav Ievlev
  2003-06-10 23:14 ` [devel] temporary file handling: questions Grigory Batalov
  0 siblings, 2 replies; 9+ messages in thread
From: Dmitry V. Levin @ 2003-06-03  8:17 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 779 bytes --]

Greetings!

Я планирую добавить "C coding guideline" в дополнение к нынешнему shell
coding guideline из SPP:

#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;

Комментарии приветствуются.


--
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] I: temporary file handling: C coding guideline
  2003-06-03  8:17 [devel] I: temporary file handling: C coding guideline Dmitry V. Levin
@ 2003-06-03  9:15 ` Stanislav Ievlev
  2003-06-10 23:14 ` [devel] temporary file handling: questions Grigory Batalov
  1 sibling, 0 replies; 9+ messages in thread
From: Stanislav Ievlev @ 2003-06-03  9:15 UTC (permalink / raw)
  To: devel

On Tue, Jun 03, 2003 at 12:17:29PM +0400, Dmitry V. Levin wrote:
> Greetings!
> 
> Я планирую добавить "C coding guideline" в дополнение к нынешнему shell
> coding guideline из SPP:
> 
> #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;
> 
> Комментарии приветствуются.
Хочется man-page по asprintf.
Я тут не очень понял про коды возврата.
0 это тоже будет ошибкой в данном случае?

Ещё надо бы наверное portable вариант без gcc-змов. Это потребуется всем
мантейнерам которые захотят убедить авторов в своём патче.
> 
> 
> --
> ldv




^ permalink raw reply	[flat|nested] 9+ messages in thread

* [devel] temporary file handling: questions
  2003-06-03  8:17 [devel] I: temporary file handling: C coding guideline Dmitry V. Levin
  2003-06-03  9:15 ` Stanislav Ievlev
@ 2003-06-10 23:14 ` Grigory Batalov
  2003-06-10 23:32   ` Dmitry V. Levin
  2003-06-11 14:14   ` [devel] " Alexey Tourbin
  1 sibling, 2 replies; 9+ messages in thread
From: Grigory Batalov @ 2003-06-10 23:14 UTC (permalink / raw)
  To: devel

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) ?


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] temporary file handling: questions
  2003-06-10 23:14 ` [devel] temporary file handling: questions Grigory Batalov
@ 2003-06-10 23:32   ` Dmitry V. Levin
  2003-06-11  7:31     ` Alexey I. Froloff
  2003-06-11 14:14   ` [devel] " Alexey Tourbin
  1 sibling, 1 reply; 9+ messages in thread
From: Dmitry V. Levin @ 2003-06-10 23:32 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 914 bytes --]

On Wed, Jun 11, 2003 at 03:14:59AM +0400, Grigory Batalov wrote:
>   Если я правильно понимаю, fdopen/fclose используются, чтобы
>   "занять" файловый дескриптор потоком и предотвратить
>   немедленное удаление функцией unlink?

Нет, неправильно.
fdopen(3) использует передаваемый в качестве аргумента дескриптор.

>   Или fdopen/fclose приведены для примера потокового
>   ввода/вывода, и их можно опустить (например, мне достаточно
>   open/close)? В этом случае "оттягивать до последнего"
>   нужно вызов close(fd) ?

Да, fdopen(3) приведён в качестве (реального) примера в случае, когда
осуществляется чтение/запись во временный файл.  Можно не использовать
stdio и обойтись read(2)/write(2); в этом случае вместо fclose(3) будет
вызов close(2).

Главное - сделать unlink(2) как можно раньше, и обязательно до закрытия
дескриптора файла.  Следует избегать файловых операций с именем временного
файла.


--
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] temporary file handling: questions
  2003-06-10 23:32   ` Dmitry V. Levin
@ 2003-06-11  7:31     ` Alexey I. Froloff
  2003-06-11  8:19       ` Dmitry V. Levin
  2003-06-11  8:31       ` Stanislav Ievlev
  0 siblings, 2 replies; 9+ messages in thread
From: Alexey I. Froloff @ 2003-06-11  7:31 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 394 bytes --]

* Dmitry V. Levin <ldv@altlinux.org> [030611 03:33]:
> Главное - сделать unlink(2) как можно раньше, и обязательно до
> закрытия дескриптора файла.  Следует избегать файловых операций
> с именем временного файла.
Хм... А если этот временный файл (и не один) надо передать другой
программе?

-- 
Regards, Sir Raorn.
-------------------
inn - это несравнимо хуже, чем wu-ftpd.
		-- ldv in devel@

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] temporary file handling: questions
  2003-06-11  7:31     ` Alexey I. Froloff
@ 2003-06-11  8:19       ` Dmitry V. Levin
  2003-06-13 10:30         ` Alexey I. Froloff
  2003-06-11  8:31       ` Stanislav Ievlev
  1 sibling, 1 reply; 9+ messages in thread
From: Dmitry V. Levin @ 2003-06-11  8:19 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 634 bytes --]

On Wed, Jun 11, 2003 at 11:31:01AM +0400, Alexey I. Froloff wrote:
> * Dmitry V. Levin <ldv@altlinux.org> [030611 03:33]:
> > Главное - сделать unlink(2) как можно раньше, и обязательно до
> > закрытия дескриптора файла.  Следует избегать файловых операций
> > с именем временного файла.
> Хм... А если этот временный файл (и не один) надо передать другой
> программе?

Все знают, что это, вообще говоря, плохо.
На эту тему статьи написаны, можно почитать.

Впрочем, безопасное создание временного файла и последующее его безопасное
использование - это два разных вопроса, и многие просто ограничиваются
решением первого. :(


--
ldv

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] temporary file handling: questions
  2003-06-11  7:31     ` Alexey I. Froloff
  2003-06-11  8:19       ` Dmitry V. Levin
@ 2003-06-11  8:31       ` Stanislav Ievlev
  1 sibling, 0 replies; 9+ messages in thread
From: Stanislav Ievlev @ 2003-06-11  8:31 UTC (permalink / raw)
  To: devel

On Wed, Jun 11, 2003 at 11:31:01AM +0400, Alexey I. Froloff wrote:
> * Dmitry V. Levin <ldv@altlinux.org> [030611 03:33]:
> > Главное - сделать unlink(2) как можно раньше, и обязательно до
> > закрытия дескриптора файла.  Следует избегать файловых операций
> > с именем временного файла.
> Хм... А если этот временный файл (и не один) надо передать другой
> программе?
А зачем это делать?
Разве нет других способов передачи данных между процессами?
> 
> -- 
> Regards, Sir Raorn.
> -------------------
> inn - это несравнимо хуже, чем wu-ftpd.
> 		-- ldv in devel@




^ permalink raw reply	[flat|nested] 9+ messages in thread

* [devel] Re: temporary file handling: questions
  2003-06-10 23:14 ` [devel] temporary file handling: questions Grigory Batalov
  2003-06-10 23:32   ` Dmitry V. Levin
@ 2003-06-11 14:14   ` Alexey Tourbin
  1 sibling, 0 replies; 9+ messages in thread
From: Alexey Tourbin @ 2003-06-11 14:14 UTC (permalink / raw)
  To: devel

[-- Attachment #1: Type: text/plain, Size: 423 bytes --]

On Wed, Jun 11, 2003 at 03:14:59AM +0400, Grigory Batalov wrote:
>   Если я правильно понимаю, fdopen/fclose используются, чтобы
>   "занять" файловый дескриптор потоком и предотвратить
>   немедленное удаление функцией unlink?

Нет, файлы -- сами по себе, дескрипторы -- сами по себе и stdio потоки --
тоже сами по себе.  У меня несколько месяцев назад от этого крыша
съезжала.  А теперь вроде так и надо.  Как же ещё? :)

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [devel] temporary file handling: questions
  2003-06-11  8:19       ` Dmitry V. Levin
@ 2003-06-13 10:30         ` Alexey I. Froloff
  0 siblings, 0 replies; 9+ messages in thread
From: Alexey I. Froloff @ 2003-06-13 10:30 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 611 bytes --]

On Wed, Jun 11, 2003 at 12:19:20PM +0400, Dmitry V. Levin wrote:
> > > Главное - сделать unlink(2) как можно раньше, и обязательно до
> > > закрытия дескриптора файла.  Следует избегать файловых операций
> > > с именем временного файла.
> > Хм... А если этот временный файл (и не один) надо передать другой
> > программе?
> Все знают, что это, вообще говоря, плохо.
> На эту тему статьи написаны, можно почитать.
Стоп! Возьмём например rpm. Создаётся временный файл потом он
"скармливается" шеллу. Как это сделать "хорошо"?

И почему "хорошо" - использовать mktemp(1) в shell-скриптах?

-- 
Regards,
Sir Raorn.

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2003-06-13 10:30 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-06-03  8:17 [devel] I: temporary file handling: C coding guideline Dmitry V. Levin
2003-06-03  9:15 ` Stanislav Ievlev
2003-06-10 23:14 ` [devel] temporary file handling: questions Grigory Batalov
2003-06-10 23:32   ` Dmitry V. Levin
2003-06-11  7:31     ` Alexey I. Froloff
2003-06-11  8:19       ` Dmitry V. Levin
2003-06-13 10:30         ` Alexey I. Froloff
2003-06-11  8:31       ` Stanislav Ievlev
2003-06-11 14:14   ` [devel] " Alexey Tourbin

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git