КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Системные вызовы для работы с файламиОткрытие файла на чтение или запись с пом системного вызова: Include <fcntl.h>. Если файл не существует, он может быть создан. int open(const char*name, int mode, [int perm]). Первый аргумент является указателем на имя файла. Аргумент mode указывает на режим открытия файла и представляет собой побитное объединение флагов, с помощью операции ИЛИ (O_RDONLY, O_WRONLY, O_RDWR). Аргумент perm, определяющий права доступа к файлу, используется только при создании файла или если во втором пар-ре использовали O_CREATE. Именно из 3 пар-ра будет вычит значение umask. Если операция открытия файла закончилась удачно, то будет возвращен файловый дескриптор — указатель на файл, использующийся в последующих операциях чтения, записи и т. д. В случае неудачи open возвратит -1, а глобальная переменная errno будет содержать код ошибки. Дескрипторы можно использ для потоков в/в. Мы можем закрыть люб дескриптор. Закрытие файла Include <unistd.h>. int close(int fd); Функция разрывает связь между файловым дескриптором и открытым файлом. В случае успеха close возвращает нулевое значение, в противном случае возвращается -1 . Чтение из файла происходит с пом: int read(int fd, void*buf, int len) Функции read позволяет считывать данные из файла, на который указывает файловый дескриптор. Считанные данные помещаются в бу- фер приложения, указатель на который передается в аргументе buf. Общее число считанных байт в нормальной ситуации равно сумме размера буфера Len. Возврат больше 0 –кол-во прочитанных байтов, если read вернул 0 – то конец файла. Запись в файл: Функция используется для записи данных в файл: int write (int fd, void*buf,int len) Данные для записи в файл находятся в буфере, указанном аргументом buf . После завершения операции значение файлового указателя будет увеличено на len – кол-во данных. Позиционирование – последоват-ный порядок чтения из файла может быть нарушен, изменив в явном виде значение текущей позиции, связан с файловым дескриптором – с пом сист вызова: int lseek(int fd, int offset, int whence). С помощью функции lseek можно установить файловый указатель на любое место файла и тем самым обеспечить прямой доступ к любой части файла. Интерпретация аргумента offset зависит от аргумента whence, который может принимать следующие значения: В случае успеха функция возвращает положительное целое, равное текущему значению файлового указателя.Пример: прочитать последние 100 байт из файла f.dat Int c, char buf[100]; fd=open(“f.dat”,O_RDONLY); Lseek(fd, -100,SEEK_ENT); c=read(fd,buf,100);close(fd);
25. Понятие «процесс» в ОС UNIX. Контекст процесса; свойства процесса; состояние процесса. Процесс – можно понимать программу, кот выполн-ся под упр-ем ОС. Контекст процесса вкл: пользоват контекст(код и данные располож в адресном пр-ве процесса) и контекст ядра(стек ядра, образуется в режиме ядра и данные ядра). Данные ядра – UID –идентификатор пользователя , PID - процесса, GID - группы. Св-ва процесса:1) сегмент кода, 2)сегмент данных,3)стек,4)состояние процессора PSW,5)права и полномочия для UNIX,6)ресурсы. В каждый момент времени процесс может исполн и не исполн, причем кот не исполн готов к исполнению, так и не готов. Схема состояния процесса: В состоянии блокировке процесс м.попасть, если процесс произвел такой сист вызов, после кот его продолжение невозможно. В ОС UNIX легковесный процесс –представл собой доп единицу планировки в рамках одного обыч процесса. Обычн процесс может представ как группу легковесных. Легковесный процесс – поток, нить – thread. У каждой нити есть свой собств стек и свой счетчик команд из PSW. При прогр-и легковесн процессов говорим об парал программ-е с разделен данными. Св-ва процесса в Unix: 1)код, м.б. разделяемый, св-во доступно только на чтение.2)сегмент данных вкл стек, доступно Read/WR.3)сост-е регистра – контекст, вкл счетчик команд, PSW, указатель стека и все РОН. Пока прогр-е не в сост-и выполнения содержимое его регистров храниться в спуц структуре данных – ядре.4)таблица дискрипторов – привяз номера к реальн структуре в ядре.5)команд строка – структура данных из массивов указателей на аргументы команд.строки. >ls –l -a /usr/local.
Argv – ссылка на массив указателей: char*argv:
6)окружение – стр-ра данных содерж указатели на строки переменных окружения. Строки заканчиваются \0. 7)текущий каталог – люб процесс наход в каталоге файловой системы. 8)корневой каталог - в UNIX м. организовать файл систему и всем его потомкам, частью дерева каталогов, имеющий общий корень. Процессу можно определить корнев каталог jal, а каталоги за его перелом будут невидимы. 9)umask – при создании новых файлов значение этого пар-ра побитово вычисляется из прав доступа 10) идентификаторы – UID и GID – факт полномочия программы, определяют права процесса в файловой системе. Эти прог-мы выполн с правами пользователя, владещ правами программы, а не тот кто запустил. 11)идентификатор процесса 12)диспозиция обработки сигнала – это то как процесс реаг-ет на определен сигналы. 13) счетчики потребл-х ресурсов.
|