83.50K
Категория: ПрограммированиеПрограммирование

Операционные системы. API для работы с файлами, каталогами и ФС

1.

Операционные системы
API для работы с файлами, каталогами и ФС
Программный интерфейс (API) для работы с файлами и каталогами
позволяет производить работу с ними в Ваших программах. Далее приведен
список основных функций, доступных для использования в программах. В
круглых скобках указан номер раздела системы документации man. Итак,
перечислим эти полезные функции:
- работа с файлами (и их содержимым):
open(2), creat(2), unlink(2), remove(3), read(2), write(2), close(2), fopen(3),
fread(3), fwrite(3), fclose(3), link(2), mkdir(2), rmdir(2), opendir(2), readdir(2),
mknod(2), socket(2), bind(2), stat(2), fcntl(2), dup(2), и т. д.
- управление принадлежностью, правами доступа и дополнительными
атрибутами:
chown(2), chgrp(2), chmod(2), umask(2), acl_get_file(3), acl_set_file(3), и т. д.
- управление файловыми системами:
mount(2), umount(2), sync(2).

2.

Операционные системы
Интерпретаторы команд UNIX
Интерпретатор команд (shell, оболочка) – это утилита, позволяющая
пользователю давать команды системе.
Команды могут быть встроенными в интерпретатор и внешними (выполняются
путем запуска других программ). В системе UNIX интерпретаторы традиционно
могут служить средством программирования – могут выполнять программы,
написанные на их внутреннем языке. Такие программы называются
командными файлами, или скриптами. Командный файл не компилируется,
а непосредственно выполняется интерпретатором. Интерпретаторов в системе
может быть несколько, каждый из них – это выполняемый файл, обычно
размещаемый в каталоге «/bin», например:
/bin/sh – это обычно ссылка, но может быть и выполняемый файл, классический
shell;
/bin/bash – Bourne again shell (модернизированный shell);
/bin/tcsh – turbo C-shell (использует синтаксис выражений, похожий на синтаксис
языка С).
Интерпретатор является, как правило, первой программой, запускаемой при
входе пользователя в систему. Для каждого пользователя можно индивидуально
назначить стартовую программу, указав полный путь к ней в файле /etc/passwd
(пользователям доступна команда chsh).

3.

Операционные системы
Интерпретаторы команд UNIX (продолжение)
Первый интерпретатор для UNIX был написан Томпсоном и уже давно не
используется. В середине семидесятых годов 20 века появился Bourne shell
(просто shell, sh). Его первые версии были написаны Стивеном Борном.
Немного позже появился C-shell (csh), интерпретатор, автором которого
является Bill Joy. Этот интерпретатор стал альтернативой Bourne shell, причем
имел несколько серьезных преимуществ.
Если говорить о классификации, то основным признаком является синтаксис
командного языка: shell-like, cshell-like, или что-то другое.
Интерпретаторы отличаются по функциональности, размеру, скорости работы,
синтаксису командного языка. В одной системе обычно присутствует несколько
оболочек, и можно выбрать любую, которая подходит тому или иному
пользователю, или в той или иной ситуации. Интерпретатор, используемый по
умолчанию в Linux, называется bash.

4.

Операционные системы
Интерпретатор команд C-shell
Стандартное имя выполняемого файла - «/bin/csh». В Linux он представлен
клоном «/bin/tcsh», и стандартное имя ссылается на него. Синтаксис
командного языка напоминает синтаксис языка С. Во многом оболочки для
UNIX похожи, что облегчает задачу освоения нескольких оболочек.
Любой командный интерпретатор имеет примерно такую
последовательность выполнения команд:
1. выдать строку-приглашение (не обязательно);
2. получить командную строку от пользователя или прочитать ее из файла;
3. разбить строку на слова, при этом ищутся разделители слов;
4. разбить строку на команды (ищутся разделители команд);
5. выполнить подстановки (преобразования строки, заданные специальными
символами);
6. проанализировать первое слово (имя) команды, возможные варианты:
- внутренняя;
- внешняя;
- не найдена;
7. запустить команду на выполнение (и передать ей указанные параметры);
8. ждать завершения команды (не обязательно);
9. получить код завершения команды (возможно, асинхронно, то есть в любой
момент);
10. перейти к пункту 1 или 2.

5.

Операционные системы
Лексическая структура языка C-shell
Интерпретатор различает обычные символы, разделители слов и
метасимволы. Разделители позволяют разбить строку на слова, они также могут
иметь специальное значение. Метасимволы имеют специальное значение, они
обозначают операции, но не разделяют строку на слова.
Разделители слов: ; ( ) < > & | <таб> <прб>
Метасимволы: ~ ` ' " ! @ # $ % ^ : & * | , . ? { } [ ] \
Знаки арифметических, логических операций и операций сравнения
распознаются только в соответствующем контексте.
Кавычки формируют строки, которые являются логически неделимыми
операндами для команд.
"string" – внутри такой строки интерпретатор выполнит подстановки, заданные
метасимволами. Есть исключения, например, двойные кавычки экранируют
специальное значение символа '*' для интерпретатора.
'string' – внутри такой строки большинство метасимволов теряют свое
значение, строка передается в команду без изменений. Для «экранирования»
единичных метасимволов удобно также использовать символ '\' (backslash).
`string` - эта строка считается командой, выполняется и заменяется на
стандартный вывод, полученный в результате выполнения.
Пример использования подстановки результата выполнения команды:
cat `find /home/ -name bash.history`

6.

Операционные системы
Лексическая структура языка C-shell
A;B;C
- shell выполнит A (дождется ее окончания), затем B, затем С. То есть это
обычное последовательное выполнение, просто команды записаны в одной
строке.
A && B
- shell выполнит A, и если она завершится успешно, выполнит B. .
A || B
- интерпретатор выполнит A, и если она завершится с ненулевым кодом, то
выполнит B.
A|B|C
- все три команды запускаются одновременно и интерпретатор ждет их
завершения. Такая последовательность запуска называется конвейером, та как
стандартный вывод предыдущей команды направляется на стандартный ввод
следующей. . Пример использования конвейера:
ps aux | grep ^scribble
A&
- запуск команды в фоновом режиме. После запуска интерпретатор сразу
выдает приглашение на ввод новой команды.
( A && B ) || C
- скобки, позволяющие объединять несколько команд, делая из них логически
одну команду. Не обязательно при этом между командами должны стоять
логические связки. Фактически, скобки предписывают выполнить команды в
отдельном shell, который называют subshell.
English     Русский Правила