ВУЗ:
Составители:
Аргумент file является указателем на имя файла, который должен
быть загружен. Аргумент path - это указатель на полный путь к файлу,
который должен быть загружен. Аргументы arg0, argN представляют
собой указатели на аргументы командной строки. Заметим, что аргумент
arg0 должен указывать на имя загружаемого файла. Аргумент argv пред-
ставляет собой массив из указателей на аргументы командной строки. На-
чальный элемент массива должен указывать на имя загружаемой про-
граммы, а заканчиваться массив должен элементом, содержащим указа-
тель NULL. Аргумент envp содержит переменные окружения, установлен
ные в операционной системе для данного пользователя. Переменные ок-
ружения можно взять те же, что передаются в функцию main()
int main (int argc, char *argv[], char *envp[])
Задание: напишите программу, которая распечатывает на экране
значения переменных окружения.
Поскольку системный контекст процесса при вызове ехес() остает-
ся практически неизменным, большинство атрибутов процесса, доступ-
ных пользователю через системные вызовы (PID, UID, GID, PPID и дру-
гие), после запуска новой программы также не изменяется.
Важно понимать разницу между системными вызовами fork()
и ехес(). Системный вызов fork() создает новый процесс, у которого поль-
зовательский контекст совпадает с пользовательским контекстом процес-
сародителя. Системный вызов ехес() изменяет пользовательский контекст
текущего процесса, не создавая новый процесс.
Задание: Рассмотрите пример использования системного вызова
exec(). Проанализируйте результат.
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[], char *envp[])
{/* Программа запускает команду "cat 1.c", которая должна вывести со-
держимое данного файла на экран. Для функции execle в качестве имени
28
4. Системные вызовы для работы с файлами.
13
Из курса программирования на языке Си известны функции работы
с файлами из стандартной библиотеки вводавывода, такие как fopen(),
fread(), fwrite() и т.д. Эти функции входят как неотъемлемая часть в стан-
дарт ANSI на язык Си и позволяют программисту получать информацию
из файла или записывать ее в файл. Но операции, определяемые функция-
ми стандартной библиотеки вводавывода, не являются потоковыми опе-
рациями, так как каждая из них требует наличия некоторой структуры пе-
редаваемых данных. В операционной системе UNIX эти функции пред-
ставляют собой надстройку (сервисный интерфейс) над системными вы-
зовами, осуществляющими прямые потоковые операции обмена ин-
формацией между процессом и файлом и не требующими никаких зна-
ний о том, что она содержит. В системных вызовах open(), read(), write()и close(), которые применяются для потокового обмена, используется
понятие файлового дескриптора. Информация о файлах, используемых
процессом, входит в состав его системного контекста и хранится в его
блоке управления РСВ. В операционной системе UNIX можно упрощен-
но полагать, что информация о файлах, с которыми процесс осуществляет
операции потокового обмена, наряду с информацией о потоковых линиях
связи, соединяющих процесс с другими процессами и устройствами вво-
давывода, хранится в некотором массиве, получившем название табли-
цы открытых файлов или таблицы файловых дескрипторов. Индекс
элемента этого массива, соответствующий определенному потоку ввода-
вывода, получил название файлового дескриптора для этого потока. Та-
ким образом, файловый дескриптор представляет собой небольшое целое
неотрицательное число, которое для текущего процесса в данный момент
времени однозначно определяет некоторый действующий канал ввода
вывода. Некоторые файловые дескрипторы на этапе старта любой про-
граммы ассоциируются со стандартными потоками вводавывода. Так,
например, файловый дескриптор О соответствует стандартному потоку
ввода, файловый дескриптор 1 стандартному потоку вывода, файловый
Страницы
- « первая
- ‹ предыдущая
- …
- 12
- 13
- 14
- 15
- 16
- …
- следующая ›
- последняя »