Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Символические каналы связи



Символические каналы связи - это файлы, которые указывают на другие файлы.

 

Управление вводом-выводом ОС UNIX

Перенаправление ввода/вывода

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

Реализация механизма основывается на следующих свойствах ОС UNIX. Во-первых, любой ввод/вывод трактуется как ввод из некоторого файла и вывод в некоторый файл. Клавиатура и экран терминала тоже интерпретируются как файлы (первый можно только читать, а во второй можно только писать). Во-вторых, доступ к любому файлу производится через его дескриптор (положительное целое число). Фиксируются три значения дескрипторов файлов. Файл с дескриптором 1 называется файлом стандартного ввода (stdin), файл с дескриптором 2 - файлом стандартного вывода (stdout), и файл с дескриптором 3 - файлом стандартного вывода диагностических сообщений (stderr). В-третьих, программа, запущенная в некотором процессе, "наследует" от породившего процесса все дескрипторы открытых файлов.

В головном процессе интерпретатора командного языка файлом стандартного ввода является клавиатура терминала пользователя, а файлами стандартного вывода и вывода диагностических сообщений - экран терминала. Однако при запуске любой команды можно сообщить интерпретатору (средствами соответствующего командного языка), какой файл или вывод какой программы должен служить файлом стандартного ввода для запускаемой программы и какой файл или ввод какой программы должен служить файлом стандартного вывода или вывода диагностических сообщений для запускаемой программы. Тогда интерпретатор перед выполнением системного вызова exec открывает указанные файлы, подменяя смысл дескрипторов 1, 2 и 3.

Конечно, то же самое может проделать и любая другая программа, запускающая третью программу в специально созданном процессе. Следовательно, все, что требуется для нормального функционирования механизма перенаправления ввода/вывода - это придерживаться при программировании соглашения об использовании дескрипторов stdin, stdout и stderr. Это не очень трудно, поскольку в наиболее распространенных функциях библиотеки ввода/вывода printf, scanf и error вообще не требуется указывать дескриптор файла. Функция printf неявно использует stdout, функция scanf - stdin, а функция error - stderr.

Более подробно механизм перенаправления вывода одной программы на ввод другой программы будет рассмотрен в третьей части курса.

 

 

Команды и командный интерпретатор

Команды

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

Этот раздел знакомит вас со многими программами и инструментальными средствами системы UNIX, которые вы будете использовать достаточно часто. Если вам будет необходима более полная информация по каким-либо стандартным программам, обратитесь к "Руководству программиста".

Что делают команды

Внешний круг системы UNIX образуют программы и инструментальные средства системы, разделенные на категории функционально. Эти функции включают:

программное окружение -

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

обработка текстов -

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

организация информации -

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

обслуживающие программы -

инструментальные средства, создающие графику и выполняющие вычисления;

электронная связь -

несколько программ (например, mail) предоставляют вам возможность передавать информацию другим пользователям и в другие системы UNIX.

Как выполнять команды

Чтобы ваш запрос был понятен системе UNIX вы должны ввести каждую команду в корректном формате или синтаксисе командной строки. Этот синтаксис определяет порядок, в котором вы вводите компоненты командной строки. И вы должны расположить все составные части командной строки в требуемом синтаксисом порядке, иначе shell не сможет интерпретировать ваш запрос.

Пример синтаксиса командной строки:

  command option(s) argument(s) <CR>

Для каждой командной строки системы UNIX вы должны ввести как минимум два компонента: имя команды и клавишу <RETURN>. (Обозначение <CR> используется в документации как инструкция для нажатия клавиши RETURN). Командная строка может также содержать ключи и аргументы. В указанном примере синтаксиса командной строки:
command - это имя программы, которую вы хотите выполнить;
option - ключи, которые указывают как запустить команду;
argument - указывает на данные, которые эта команда обрабатывает, обычно это имя каталога или файла.

В командной строке, которая включает ключи и/или аргументы, каждый компонент отделяется друг от друга по крайней мере одним пробелом. Если аргумент содержит пробел, его надо заключить в двойные кавычки. Например, если аргумент sample 1, то вы должны указать его в командной строке как "sample 1". Если вы позабудете поставить двойные кавычки, то shell будет интерпретировать sample и 1 как два отдельных аргумента.

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

 Пример.  ls -l -i file1 file2 file3  команда ключи   аргументы

В этом примере команда ls использует два ключа -l и -i и три аргумента file1, file2 и file3. Ключ -l обеспечивает информацию в длинном формате, включая режим, владельца и размер, а ключ -i печатает номер inode. Система UNIX обычно позволяет вам группировать ключи, например -li, и выводить их в любом порядке. Этого нельзя делать с аргументами.

Невзирая на разное количество компонентов, не забудьте в конце командной строки нажать клавишу <RETURN>.

Чтобы выполнить команду, введите командную строку, когда на экране появится подсказка (например, символ #). Shell рассмотрит вашу команду как ввод, найдет один или более каталогов, чтобы вызвать программу, которую вы указали, и перенаправит ваш запрос вместе с затребованными программами ядру. Ядро последует инструкциям в программе и выполнит команду, которую вы запрашивали.

После завершения выполнения программы, shell сигнализирует, что готов выполнить следующую команду, напечатав подсказку.

Библиотека системных вызовов

 

Процессы

Процесс в ОС UNIX - это программа, выполняемая в собственном виртуальном адресном пространстве. Когда пользователь входит в систему, автоматически создается процесс, в котором выполняется программа командного интерпретатора. Если командному интерпретатору встречается команда, соответствующая выполняемому файлу, то он создает новый процесс и запускает в нем соответствующую программу, начиная с функции main. Эта запущенная программа, в свою очередь, может создать процесс и запустить в нем другую программу (она тоже должна содержать функцию main) и т.д.

Управление процессами подробно обсуждается в третьей части курса. Тем не менее кратко опишем здесь общий подход. Для образования нового процесса и запуска в нем программы используются два системных вызова (примитива ядра ОС UNIX) - fork() иexec (имя-выполняемого-файла). Системный вызов fork приводит к созданию нового адресного пространства, состояние которого абсолютно идентично состоянию адресного пространства основного процесса (т.е. в нем содержатся те же программы и данные).

Другими словами, сразу после выполнения системного вызова fork основной и порожденный процессы являются абсолютными близнецами; управление и в том, и в другом находится в точке, непосредственно следующей за вызовом fork. Чтобы программа могла разобраться, в каком процессе она теперь работает - в основном или порожденном, функция fork возвращает разные значения: 0 в порожденном процессе и целое положительное число (идентификатор порожденного процесса) в основном процессе.

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

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

main()

{if(fork()==0) wait(0); /* родительский процесс */

else execl("ls", "ls", 0); /* порожденный процесс */

}

 

 

Пользователи и группы




Пользователи в Linux

Учётные записи

Linux — система многопользовательская, а потому пользователь — ключевое понятие для организации всей системы доступа в Linux. Когда пользователь регистрируется в системе (проходит процедуру авторизации, например, вводя системное имя и пароль), он идентифицируется с учётной записью, в которой система хранит информацию о каждом пользователе: его системное имя и некоторые другие сведения, необходимые для работы с ним. Именно с учётными записями, а не с самими пользователями, и работает система. Ниже приведён список этих сведений.


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 182; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.018 с.)
Главная | Случайная страница | Обратная связь