Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IT3.doc
Скачиваний:
10
Добавлен:
03.03.2016
Размер:
343.04 Кб
Скачать

2.1.2. Чтение файла, системный вызов read

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

#include <unistd.h>

ssize_t numread = read(int fd, void *buf, size_t qty);

Рисунок 2 – Системный вызов read

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

С помощью системного вызова read происходит обращение к ядру для передачи данных из файлового дескриптора fd в массив buf, который находится в пространстве памяти вызывающего процесса.

Ядро выполняет действие по запросу и возвращает информацию о результате выполнения. Если требование не было выполнено, то код возврата равен -1. В противном случае, в качестве возвращаемого значения будет число байт, переданных при чтении.

2.1.2. Запись в файл, системный вызов write

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

#include <unistd.h>

ssize_t result = write(int fd, void *buf, size_t qty);

Рисунок 3 – Системный вызов write

Системный вызов write копирует данные из памяти процесса в файл. Если ядро не может или не хочет копировать данные, то системный вызов write возвращает -1. Если ядро переслало данные в файл, то системный вызов возвращает количество байтов, переданных в файл.

2.1.3. Закрытие файла, системный вызов close

Закрытие файла производится с помощью системного вызова close, как показано на рисунке 4.

#include <unistd.h>

int result = close(int fd);

Рисунок 4 – Системный вызов close

Системный вызов close отключает соединение, которое было определено с помощью файлового дескриптора fd. При обнаружении ошибки системный вызов close возвращает значение -1.

2.1.4. Создание файла, системный вызов creat

Создание файла производится с помощью системного вызова creat, как показано на рисунке 5.

#include <fcntl.h>

int fd = creat(char *name,int mode);

Рисунок 5 – Системный вызов creat

Одним из способов создания или перезаписи файла является использование для этого системного вызова creat.

Системный вызов creat эквивалентен open с flags, равными O_CREAT|O_WRONLY|O_TRUNC

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

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

Каждый файл имеет собственника и три группы атрибутов доступа к файлу:

- rwx, rwx, rwx (r: чтение w: запись x: исполнение);

- user,group, other (пользователь-собственник, группа к которой принадлежит пользователь, все остальные).

Например, fd = creat(«addressbook», 0644);

Будет создан файл с именем addressbook. Если до этого файл не существовал права будут такими: rw-r--r--. Если же файл с указанным именем существовал, то он становится пустым, а права доступа не меняются. В любом случае через файловый дескриптор fd файл будет открыт только на запись.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]