Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Краткая теория.

Читайте также:
  1. БИЛЕТ№46. Краткая история развития органического мира.
  2. В – 1. Краткая история финансов и финансовой науки.
  3. Виды излучения и их краткая характеристика.
  4. Вопрос 31. Нормативы качества окружающей среды и их краткая характеристика.
  5. ВОПРОС 4. Краткая история возникновения теории и практики игрового обучения
  6. Выбор дезинфектанта. Краткая характеристика наиболее часто используемых дезинфицирующих средств
  7. Жизненный цикл вновь создаваемой продукции, краткая характеристика этапов.
  8. Знания. Задача, проблема, теория.
  9. История цифры – краткая только пока
  10. Классификация и краткая характеристика различных типов транзисторов

Файл-это комплексное понятие, состоящее из таких компонентов, как данные, индексы и ссылки. Реальные файловые системы обычно располагаются на блочных устройствах. Данные таких устройств в действительности адресуются блоками фиксированного размера, а не отдельными байтами.

Индексы - это специальные ячейки памяти, зарезервированные файловой системой для разделения смешанных в одну кучу данных на отдельные структурные единицы, которые называются файлами. Индексы содержат информацию о том, в каких блоках файловой системы хранятся данные конкретного файла. В индексах так же содержится дата последнего доступа/модификации файла.

Ссылки - это привычное для нас отображение файлов в файловой системе. Можно условно сказать что ссылки являются именами индексных узлов файловой системы. Каталоги можно рассматривать как особые файлы, предназначенные для хранения ссылок.

Ссылки в Linux бывают двух видов:

· жесткие ссылки (прямые)

· символические ссылки.

Для создания ссылок используются функции link() и symlink(), описанные в заголовочном файле unistd.h:

int link(const char * FROM, const char *TO);

int symlink(const char * FROM, const char *TO);

Обе функции возвращают значение ноль при удачном завершении, или значение -1, если произошла ошибка. Аргументы From и TO аналогичны свободным аргументам команды ln оболочки Linux.

 

Операции над файлами заключаются в использовании нескольких функций: удаления, перемещения, переименования, а так же создание ссылок и создания и удаления каталогов.

Для удаления файла служит системный вызов unlink(), объявленный в заголовочном файле unistd.h следующим образом:

int unlink(char * FNAME);

Аргумент функции FNAME- имя удаляемого файла. Функция возвращает значение 0 при удачном завершении и -1, если произошла ошибка.

Примечание: для удаления каталогов используется функция rmdir().

Так же существует еще одна функция удаления remove(), объявленная в библиотеке stdio.h таким образом:

int remove (char * PATHNAME);

Аргумент PATHNAME –это имя удаляемого элемента. Функция remove() возвращает 0, если файл успешно удален. Возвращаемое значение -1 свидетельствует об ошибке. Данная функция способна удалить любой файл(каталог, ссылку и обычный файл).

 

Пример 1. Удаления файла с использованием обоих функций

#include <unistd.h>

#include <stdio.h>

int main(int argc, char ** argv)

{

if (argc<3)

{fprintf(stderr,”Ошибка.! Мало аргументов\n”);

return 1;

}

if (unlink(argv[1])==-1)

{

fprintf(stderr,”Не удалось удалить файл\n”); return 1;

}

if(remove(argv[2])==-1)

{ fprintf(stderr,”Не удалось удалить файл\n”); return 1;

}

return 0;}

Для перемещения/переименования файла существует функция rename(). Прототип функции находится в заголовочном файле stdio.h:

int rename(const char * OLDF, const char * NEWF);

Аргумент OLDF-имя файла, который нужно переместить/переименовать, а NEWF- имя нового файла. При успешном завершении функция возвращает значение 0 и значение -1, если произошла ошибка.

Пример 2. Переименование файла

#include <stdio.h>

int main(int argc, char ** argv)

{

if (argc<3)

{fprintf(stderr,”Ошибка! Мало аргументов\n”); return 1;

}

if (rename(argv[1],argv[2])==-1)

{ fprintf(stderr,”Ошибка! \n”); return 1;}

return 0;}

Примечание: Открытые файл никак не влияет на функцию перемещение/переименование.

В процессе работы может потребоваться создание или удаление каталогов. Для этого существуют две функции.

Функция создания каталога mkdir(), объявленная в заголовочном файле sys\types.h, имеет вид:

int mkdir(const char * NAME, mode_t MODE);

NAME - имя нового каталога. MODE – передаваемые новому каталогу атрибуты (права доступа). Функция возвращает 0 при удачно завершении работы, и -1, если произошла ошибка.

Пример 3. Создание каталога.

#include <stdio.h>

#include <sys/tipes.h>

#include <sys\stat.h>

int main(int argc, char **argv){

mode_t mode=0777;

if(argc<2){

fprintf(stderr,”Ошибка! мало аргументов\n”); return 1;}

if(mkdir(argv[1],mode)==-1)

{fprintf(stderr,”Ошибка создания каталога\n”); return 1;}

return 0;}

Данная программа будет работать не так, как ожидается. Каталогу присвоятся не все права доступа, которые мы хотели бы. Это связано с тем, что каждому процессу в Linux привязана маска прав доступа, которая передается дочерним процессам. Маска прав доступа- это число, представляющее собой набор битов прав доступа, которые никогда не будут устанавливаться для создаваемых процессом файлов и каталогов. Команда оболочки Linux umask позволяет узнать текущую маску прав доступа.

Программа может сама изменить маску прав доступа текущего процесса при помощи системного вызова umask(), объявленного в заголовочном файле \sys\types.h:

mode_t umask(mode_t MASK);

Этот системный вызов изменит текущую маску прав доступа и возвращает предыдущее значение маски.

Пример 4. Создание каталога с использование umask().

#include <stdio.h>

#include <sys/tipes.h>

#include <sys\stat.h>

int main(int argc, char **argv){

mode_t mode=0777;

if(argc<2){

fprintf(stderr,”Ошибка! мало аргументов\n”); return 1;}

umask(0000);

if(mkdir(argv[1],mode)==-1)

{fprintf(stderr,”Ошибка создания каталога\n”); return 1;}

return 0;}

 

Удаление каталога возможно двумя функциями. Функцией remove(), рассмотренной ранее, и функцией rmdir(), объявленной в библиотеке unistd.h:

int rmdir(const char * DIR);

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

Пример 5. Удаление каталога.

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char **argv)

{if(argc<2)

{ fprintf(stderr,”Ошибка! мало аргументов\n”); return 1;

}

if(mkdir(argv[1])==-1)

{fprintf(stderr,”Ошибка удаления каталога\n”); return 1;}

return 0;}

Для смены прав доступа применяют системные вызовы семейства chmod(), объявленные в заголовочном файле sys\types.h:

int chmod(const char * FNAME, mode_t MODE);

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

Варианты заданий.

1. Написать программу, которая создает файл, создает каталог и перемещает созданный файл в каталог. Распечатать содержимое каталога на экран

2. Написать программу, которая создает каталог, переименовывает его, и переносит в него любой файл.

3. Написать программу, которая создает два файла, один каталог. Перенести в каталог два файла, один из них переименовать.

4. Написать программу создания каталога и файла. Распечатать содержимое текущего каталога. Удалить созданный каталог.

5. Написать программу, которая создает 3 файла и 2 каталога. Удалить один каталог, переименовать второй каталог и перенести в него 2 файла. Распечатать содержимое текущего каталога не экран до и после перемещения.

6. Написать программу, которая создает 3 каталога. переместить в каталоги по одну любому файлу. Переименовать каталог. Удалить все файлы в одном каталоге.

Контрольные вопросы.

1. Что такое файл? Его компоненты.

2. Какие функции удаления файла вы знаете?

3. Как можно переместить файл?

4. Расскажите о семействе функций chmod().

 




Дата добавления: 2014-12-15; просмотров: 38 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав