Открытие файлов созданных аргументом file

Jul 04, 2012 16:47


В качестве примера следующий код открывает файл, указанный при помощи

аргумента file, для записи. Если файл не существует, то с учетом umask 022 он



создается с разрешением 0644 (хотя аргумент mode равен 0664). Если файл существует,

то он усекается до нулевой длины:

int fd.

fd = open ( file . 0_WR0NLY | 0_CREAT | 0_TRUNC.

S_IWUSR I S_IRUSR I SJWGRP | SJRGRP | SJROTH).

i f (fd == -1)

/* ошибка */

Функция creat()

Комбинация 0_WR0NLY | 0_CREAT | 0_TRUNC настолько распространена, что существует

отдельный системный вызов, обеспечивающий как раз это поведение:

finclude

finclude

finclude

int creat (const char *name, modet mode):

ПРИМЕЧАНИЕ--------------------------------------------- ;------------------------------------------

Да, все правильно, в имени функции отсутствует буква е (creat вместо create). Кен Томпсон, создатель

Unix, однажды пошутил, что эта отсутствующая буква - самая большая оплошность в дизайне

Unix.

Это типичный вызов creat():

int fd:

fd = creat ( file . 0644):

i f (fd - -1)

/* ошибка */

Он идентичен следующему вызову:

int fd:

fd = open ( file . 0_WR0NLY I 0_CREAT | 0_TRUNC, 0644).

i f (fd == -1)

/* ошибка */

В большинстве архитектур Linux1 c re a tO - это системный вызов, хотя его

довольно просто реализовать в пользовательском пространстве:

int creat (const char *name, int mode)

{

return open (name, 0_WR0NLY | 0_CREAT | 0_TRUNC. mode):

}

Previous post Next post
Up