Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

chown

Суперпользователь может изменить владельца файла с помощью системного вызова chown.

#include <sys/types.h> #include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);
 

В вызове применяются числовые значения идентификаторов (ID) нового пользователя и группы (взятые из системных вызовов

getuid
и
getgid
) и системная величина, используемая для ограничения пользователей, имеющих разрешение изменять владельца файла. Владелец и группа файла изменяются, если заданы соответствующие полномочия.

Примечание

Стандарт POSIX в действительности допускает существование систем, в которых несуперпользователи могут изменять права владения файлом. Все "правильные" с точки зрения POSIX системы не допускают этого, но строго говоря, это расширение стандарта (в FIPS 151-2). Все виды систем, с которыми мы имеем дело в этой книге, подчиняются спецификации XSI (X/Open System Interface) и соблюдают на деле правила владения.

unlink, link и symlink

С помощью вызова

unlink
вы можете удалить файл.

Системный вызов

unlink
удаляет запись о файле в каталоге и уменьшает на единицу счетчик ссылок на файл. Он возвращает 0, если удаление ссылки прошло успешно, и -1 в случае ошибки. Для выполнения вызова у вас должны быть права на запись и выполнение в каталоге, хранящем ссылку на файл.

#include <unistd.h>

int unlink(const char *path);

int link(const char *path1, const char *path2);

int symlink(const char *path1, const char *path2);

Если счетчик становится равен нулю и файл не открыт ни в одном процессе, он удаляется. В действительности элемент каталога всегда удаляется немедленно, а место, занятое содержимым файла, не очищается до тех пор, пока последний процесс (если таковой существует) не закроет файл. Этот вызов использует программа

rm
. Дополнительные ссылки, предоставляющие альтернативные имена файла, обычно создаются программой
ln
. Вы можете программно создать новые ссылки на файл с помощью системного вызова
link
.

Примечание

Создание файла с помощью вызова

open
и последующее обращение к
unlink
для этого файла — трюк, применяемый некоторыми программистами для создания временных или транзитных файлов. Эти файлы доступны программе, только пока они открыты; и будут удалены автоматически, когда программа завершится, и файлы будут закрыты.

Системный вызов

link
создает новую ссылку на существующий файл
path1
. Новый элемент каталога задается в
path2
. Символические ссылки можно создавать аналогичным образом с помощью системного вызова
symlink
. Имейте в виду, что символические ссылки на файл не увеличивают значение счетчика ссылок и таким образом, в отличие от обычных (жестких) ссылок, не мешают удалению файла.

mkdir и rmdir

Вы можете создавать и удалять каталоги, применяя системные вызовы

mkdir
и
rmdir
.

#include <sys/types.h>#include <sys/stat.h>

int mkdir(const char *path, mode_t mode);

Системный вызов

mkdir
используется для создания каталогов и эквивалентен программе
mkdir
. Вызов
mkdir
формирует новый каталог с именем, указанным в параметре
path
. Права доступа к каталогу передаются в параметре mode и задаются как опция о
O_CREAT
в системном вызове open и также зависят от переменной
umask
.

#include <unistd.h>

int rmdir(const char *path);

Системный вызов

rmdir
удаляет каталоги, но только если они пустые. Программа
rmdir
использует этот системный вызов для выполнения аналогичной работы.

chdir и getcwd

Программа может перемещаться по каталогам во многом так же, как пользователь перемещается по файловой системе. Как вы применяете в командной оболочке команду

cd
для смены каталога, так и программа может использовать системный вызов
chdir
.

#include <unistd.h>

int chdir(const char *path);

Программа может определить свой текущий рабочий каталог, вызвав функцию

getcwd
.

#include <unistd.h>

char *getcwd(char *buf, size_t size);

Функция

getcwd
записывает имя текущего каталога в заданный буфер
buf
. Она возвращает
NULL
, если имя каталога превысит размер буфера (ошибка
ERANGE
), заданный в параметре
size
. В случае успешного завершения она возвращает
buf
.

  • Читать дальше
  • 1
  • ...
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: