
- •Руденко т.В. Сборник задач и упражнений по языку Си. ( учебное пособие для студентов II курса )
- •Предисловие
- •Типы, операции, выражения
- •Управление
- •3.1 Синтаксис и семантика операторов языка Си
- •Обработка числовых данных
- •Обработка символьных данных
- •Функции и структура программы
- •Указатели и массивы
- •Структуры, объединения
- •6.1 Основные сведения
- •6.2 Структуры и функции. Указатели на структуры.
- •6.3 Структуры со сылками на себя
- •Ввод-вывод
- •7.1 Стандартный ввод-вывод
- •7.2 Работа с файлами
- •Интерфейс с системой unix
- •Низкоуровневый ввод-вывод
- •Процессы, сигналы
- •8.2.1 Конвейер, перенаправление ввода-вывода
- •8.2.2 Сигналы. Фоновые процессы.
- •Задания практикума
- •Свойства транслятора
- •Калькулятор
- •Моделирование работы интерпретатора shell
- •Приложения
- •Библиотека стандартных функций языка с
- •Функции работы со строками
- •Функции проверки класса литер
- •Ввод-вывод
- •Операции над файлами
- •Форматный вывод
- •Литеры-спецификаторы и их смысл при выводе
- •Форматный ввод
- •Литеры-спецификаторы и их смысл при вводе
- •Функции ввода-вывода литер
- •Функции позиционирования файла
- •Математические функции
- •Функции общего назначения
- •Дальние переходы
- •10.2 Фрагменты стандарта языка Си
- •10.2.1 Классификация типов
- •10.2.2 Приоритеты и порядок выполнения операций
- •10.2.3 Арифметические преобразования при выполнении арифметических операций вида X op y
- •10.2.4 Арифметические преобразования при выполнении присваивания и явного приведения
- •10.2.6 Явное приведение ( тип т ) X
- •10.2.7 Адресная арифметика
- •10.3 Системные функции unix
- •10.3.1 Базисные средства ввода-вывода
- •10.3.2 Дополнительные средства ввода-вывода
- •10.3.3 Процессы, транспортеры, сигналы
- •Литература
- •Содержание
10.3.2 Дополнительные средства ввода-вывода
int link ( char name1, char name2)
с физическим файлом может быть связано несколько имен. Первое имя файл получает при создании. Последующие имена ( ссылки ) образуются при помощи системной функции link. Параметр name2 – это альтернативное имя для файла с именем name1.
Функция link возвращает 0 либо –1, если создать ссылку не удалось (например, файл name2 уже существует).
int unlink ( char name)
функция unlink удаляет элемент оглавления, соответствующий файлу, имя которого задано параметром name. Если это была последняя ссылка на файл, то файл уничтожается.
Функция unlink возвращает 0 либо –1, если файла не существует или он не может быть уничтожен.
long lseek ( int fd, long offset, int origin)
ввод-вывод обычно бывает последовательным, т.е. каждая очередная операция чтения-записи начинается с позиции, следующей за обработанной в предыдущей операции. Однако , при желании, можно читать файл в произвольном порядке. Системная функция lseek предоставляет способ передвигаться по файлу, не читая и не записывая данные.
Функция lseek в файле с дескриптором fd устанавливает текущую позицию, смещая ее на величину offset относительно места, задаваемого значением origin. Если origin равно 0, то смещение происходит от начала файла; если 1 – относительно текущей позиции; если 2 – от конца файла. Например, если требуется добавить данные в конец файла, то прежде чем что-либо записывать в файл, нужно при помощи lseek(fd, 0L, 2) найти конец файла. Чтобы вернуться в начало файла, надо выполнить lseek(fd, 0L, 0).
Возвращаемое функцией lseek значение имеет тип long и равно установленной текущей позиции файла (последующие чтение или запись будут производиться с этой позиции). В случае ошибки lseek выдает -1. Благодаря lseek с файлами можно работать как с большими массивами с замедленным доступом.
int stat ( char name, struct stat buf)
с помощью функции stat можно получить информацию о состоянии файла name. Структура stat описана в <sys/stat.h>. В этом файле также определены константы, которые можно использовать при работе с полями структуры stat.
struct stat
{ dev_t st_dev; / устройство /
ino_t st_ino; /номер inode /
unsigned short st_mode; / это поле определяет, является ли данный файл обычным файлом, оглавлением, специальным блочным или специальным литерным; кроме того, st_mode содержит биты, определяющие полномочия /
short st_nlink; / число связей /
short st_uid; / идентификатор владельца /
short st_gid; / идентификатор группы владельца /
dev_t st_rdev; / для специальных файлов /
off_t st_size; / размер файла в литерах /
time_t st_atime; / время последнего чтения из файла /
time_t st_mtime; / время последней записи в файл (или время его создания). На это поле не влияют изменения владельца, группы или полномочий/
time_ st_ctime; / это время устанавливается при записи в файл или при изменении владельца, группы или полномочий /
}
#define S_IFMT 0170000 / маска для выделения типа файла /
#define S_IFDIR 0040000 / оглавление-каталог /
#define S_IFCHR 0020000 / символьно-ориентированный /
#define S_IFBLK 0060000 / блочно-ориентированный /
#define S_IFREG 0100000 / обычный файл /
#define S_IREAD 0000400 / право на чтение для владельца /
#define S_IWRITE 0000200 / право на запись для владельца /
#define S_IEXEC 0000100 / право на выполнение для владельца /
Более подробную информацию о структуре stat и связанных с ней константах см. в файле <sys/stat.h>. Типы, подобные dev_t и ino_t, определены в <sys/types.h>.
Системный вызов stat по имени файла name возвращает полную информацию о нем, содержащуюся в inode, или –1 в случае ошибки.
Итак,
#include <sys/types.h>
#include <sys/stat.h>
…
struct stat stbuf;
char name = “my_file”;
…
stat( name, &stbuf);
заполняет структуру stbuf информацией о файле my_file.