ВУЗ:
Составители:
дескриптор 2 — стандартному потоку для вывода ошибок. В нормальном
интерактивном режиме работы стандартный поток ввода связывает
процесс с клавиатурой, а стандартные потоки вывода и вывода оши-
бок — с текущим терминалом.
Системный вызов open предназначен для выполнения операции от-
крытия файла и, в случае ее удачного осуществления, возвращает файло-
вый дескриптор открытого файла. Прототип системного вызова open
#include <fcntl.h>
int open(char *path, int flags);
int open (char *path, int flags, int mode);
Параметр path является указателем на строку, содержащую полное
или относительное имя файла. Параметр flags может принимать одно из
следующих трех значений:
• OR_DONLY если над файлом в дальнейшем будут совершаться
только операции чтения;
• O_WRONLY если над файлом в дальнейшем будут осуществляться
только операции записи;
• O_RDWR если над файлом будут осуществляться и операции чте-
ния, и операции записи.
Каждое из этих значений может быть скомбинировано посредством
операции «побитовое или (|)» с одним или несколькими флагами:
• O_CREAT если файла с указанным именем не существует, он дол-
жен быть создан;
• O_EXCL применяется совместно с флагом O_CREAT. При совме-
стном их использовании и существовании файла с указанным име-
нем, открытие файла не производится и констатируется ошибочная
ситуация;
• O_NDELAY запрещает перевод процесса в состояние «ожидание»
при выполнении операции открытия и любых последующих опера-
циях над этим файлом;
14
полнение либо до завершения процессародителя, либо до того момента,
когда родитель получит эту информацию. Процессы, находящиеся в со-
стоянии закончил исполнение, в операционной системе UNIX принято
называть процессамизомби (zombie, defunct).
Задание: напишите программу, создающую процессзомби. Выведи-
те на экран его pid и посмотрите в другом окне эмулятора терминала, как
обозначается данный процесс при вызове команды просмотра состояния
процессов (команда ps).
3. Системный вызов ехес()
Для изменения пользовательского контекста процесса (загрузки
новой программы в системный контекст текущего процесса) применяется
системный вызов ехес(). Вызов ехес() заменяет пользовательский кон-
текст текущего процесса содержимым некоторого исполняемого файла
и устанавливает начальные значения регистров процессора (в том числе
устанавливает программный счетчик на начало загружаемой программы).
Этот вызов требует для своей работы задания имени исполняемого файла,
аргументов командной строки и параметров окружающей среды. Для
осуществления вызова программист может воспользоваться одной из шес-
ти функций: execlp(), execvp(), execl() и, execv(), execle(), execve(), отли-
чающихся друг от друга представлением параметров, необходимых для
работы системного вызова ехес(). Прототипы вызовов имеют вид
#include <unistd.h>
int execlp(const char *flle, const char *arg0,... const char *argN,
(char *)NULL);
int execvp(const char *file, char *argv[]);
int execl(const char *path, const char *arg0,... const char *argN,
(char *)NULL);
int execv(const char *path, char *argv[]);
int execle(const char *path, const char *arg0, ... const char *argN,
(char *)NULL, char * envp[]);
int execve(const char *path, char *argv[], char *envp[]).
27
Страницы
- « первая
- ‹ предыдущая
- …
- 13
- 14
- 15
- 16
- 17
- …
- следующая ›
- последняя »