Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

execl - execvpe

[ Оглавление ]
               EXECL - EXECVPE
            
            
            #include  <process.h>       требуется    только    для
                                        объявления функций
            
            int execl(pathname, arg0, arg1 ... ,argn, NULL);
            
            int execle(pathname, arg0, arg1 ... ,argn, NULL, envp);
            
            int execlp(pathname, arg0, arg1 ... ,argn, NULL);
         
            
            int execlpe(pathname, arg0, arg1 ... ,argn, NULL, envp);
            
            int execv(pathname, argv);
            
            int execve(pathname, argv, envp);
            
            int execvp(pathname, argv);
            
            int exevpe(pathname, argv, envp);
            
            char *pathname;                 path-имя  выполняемого
                                            файла
            char *arg0, *arg1, ..., *argn;  список  указателей  на
                                            аргументы
            char *argv[];                   массив  указателей  на
                                            аргументы
            char *envp[];                   массив  указателей  на
                                            установленное  окруже-
                                            ние
               Описание.
            
               Функции  exec  загружают  и  выполняют новый child-процесс.
         Когда вызов произошел успешно, child-процесс размещается в  памя-
         ти,  занятой  вызвавшим  процессом.  Для  загрузки  и  выполнения
         child-процесса должно быть доступно достаточно памяти.
               Pathname может определять полный  path  (из  корня),  часть
         path (из текущего рабочего директория) или просто имя файла.
               Если pathname не имеет расширения для имени файла  или если
         оно не заканчивается точкой (.), тогда функции exec устанавливают
         расширение  .EXE. Если pathname имеет расширение, то используется
         только это расширение. Если pathname заканчивается  точкой,  exec
         осуществляет  поиск  pathname  без  расширения. Процедуры execlp,
         execlpe, execvpe осуществляют поиск для pathname (используя те же
         самые процедуры) в директориях, определенных переменной окружения
         PATH.
               Аргументы для нового процесса передаются  как  аргументы  в
         вызове exec путем задания одного или более указателей на символь-
         ные  строки. Эти символьные строки образуют список аргументов для
         child-процесса. Общая длина строк, определяющая список аргументов
         для нового процесса, не может превышать 128 байтов. Нулевой  сим-
         вол окончания '\0 'для  каждой строки в эту длину не засчитывает-
         ся,а символы пробела (автоматически вставляемые для аргументов) -
         засчитываются.
               Указатели аргументов могут передаваться как отдельные аргу-
         менты  (в execl, execle, execlp, execlpe) или как массив указате-
         лей (в execv, execve, execvp, execvpe). По крайней мере один  ар-
         гумент  -  arg0 или argv[0] - должен быть передан child-процессу.
         По соглашению этот аргумент является копией  аргумента  pathname.
         (Другое  значение  не  будет воспринято как ошибка). В версиях MS
         DOS, ранних от 3.0, передаваемое значение arg0 или argv[0]  явля-
         ется не доступным для использования в child-процессе. Однако, для
         версий  MS  DOS  3.0  и  старших   pathname доступно как arg0 или
         argv[0].
               Вызовы execl, execle, execlp, execlpe  обычно  используются
         
         тогда,  когда  количество  аргументов  известно заранее. Аргумент
         arg0 обычно является указателем на pathname. Аргументы от arg1 до
         argn указывают на символьные строки, образующие новый список  ар-
         гументов. Идущий за аргументом argn NULL-указатель определяет ко-
         нец списка аргументов.
               Обычно  вызовы  execv, execve, execvp, execvpe используются
         тогда, когда число аргументов для нового процесса является  пере-
         менным.  Указатели на аргументы пересылаются как массив argv. Ар-
         гумент argv[0] обычно является указателем на pathname.  Аргументы
         от  argv[1] до argv[n] указывают на символьные строки, образующие
         новый список аргументов. Аргумент argv[n+1] должен быть NULL-ука-
         зателем для определения конца списка аргументов.
               Файлы, открытые до вызова exec, остаются открытыми и в  но-
         вом  процессе.  В вызовах execl, execlp, execv, execvp child-про-
         цесс наследует окружение parent-процесса. Вызовы execle, execlpe,
         execve, execvpe позволяют  пользователю  изменять  окружение  для
         child-процесса,  передавая  список установленного окружения через
         аргумент envp.
               Аргумент envp является массивом указателей на char,  каждый
         элемент  которого (исключая последний элемент) указывает на стро-
         ку, которая заканчивается нулем и определяет  переменную  окруже-
         ния. Обычно эта строка имеет форму:
            
               NAME = value   ,
            
         где  NAME -  имя  переменной  окружения,  value  - значение стро-
         ки  (заметим, что  value не заключается в кавычки "..."). Послед-
         ним элементом массива envp должен быть NULL.
               Если значением envp является NULL, child-процесс  наследует
         установленное окружение parent-процесса.

               Возвращаемое значение.
            
               Функции  exec  не  имеют  нормального возврата в вызывающий
         процесс. Если из функции exec происходит возврат, то это означает
         ошибку и возвращаемое значение равно  -1.  Переменная  errno  при
         этом устанавливается в одно из следующих значений:
            
            
            ЗНАЧЕНИЕ               СМЫСЛ ЗНАЧЕНИЯ
      
            
            E2BIG          Список аргументов превышает  128  байт,
                           или    пространство,    требуемое   для
                           информации окружения, превышает 32К
                           
            EACCES         Блокировка  или  разделение файла  (для
                           версий 3.0 и старших)
                           
            EMFILE         Много  открытых файлов (специфицирован-
                           ный файл должен  быть  открыт,    чтобы
                           начать его выполнение)
                           
            ENOENT         Файл или path-имя не найдено
                           
         
            ENOEXEC        Заданный файл  не является  выполняемым
                           или имеет неверный формат
                           
            ENOMEM         Доступной   памяти  не  достаточно  для
                           выполнения child-процеса; или доступная
                           память    является   запорченной;   или
                           существуют неверные блоки, указывающие,
                           что parent-процесс неверно размещен

               См.  также  abort,  exit,  _exit,  onexit, spawnl, spawnle,
         spawnlp, spawnlpe, spawnv, spawnve, spawnvp, spawnvpe, system.
               Замечание. Вызовы exec не сохраняют текстовый режим  преоб-
         разования  для открытых файлов. Если child-процесс должен исполь-
         зовать файлы, унаследованные  от  parent-процесса,  тогда  должна
         быть  использована процедура setmode для установки требуемого ре-
         жима преобразования для этих файлов.
               Установки сигналов прерывания не сохраняются  в  child-про-
         цессе,  созданном вызовом процедуры exec. Эти установки переуста-
         навливаются по умолчанию в child-процессе.
            
               Пример:
               
            #include <process.h>
            #include <stdio.h>
            
            extern char **environ;
            
            char *args[4];
            int result;
            
            args[0] = "child";
            args[1] = "one";
            args[2] = "two";
            args[3] = NULL;
               
               /*  все  следующие  операторы  позволяют выполнять процесс,
         названный "child.exe", и передать ему три аргумента. */
            
            
            result = execl("child.exe", "child", "one", "two",
                           NULL);
            result = execle("child.exe", "child", "one", "two",
                           NULL, environ);
            result = execlp("child.exe", "child", "one", "two",
                           NULL);
            result = execv("child.exe", args);
            result = execve("child.exe", args, environ);
            result = execvp("child.exe", args);.
            
      
               EXIT - _EXIT
            
            #include <process.h>   требуется только для объявления
                                   функции
            #include <stdlib.h>    использует  либо  <process.h>,
         
                                   либо <stdlib.h>
            
            void exit(status);     завершает процесс  после закры-
                                   тия файла
            
            void _exit(status);    завершает процесс  без обновле-
                                   ния буферов потока
            int status;            статус выхода
            
            
               Описание.
            
               Функции exit и _exit завершают вызванный процесс. Перед за-
         вершением  процесса функция exit обновляет все буферы и закрывает
         все открытые файлы. Функция _exit завершает все процессы без  об-
         новления буферов потока. Значение status обычно устанавливается в
         0  для указания нормального выхода и устанавливается в любое дру-
         гое значение для определения  ошибки.  Поскольку  вызовы  exit  и
         _exit  не возвращают значения, младший байт status является возв-
         ратом для ожидающего parent-процесса. Если  нет  parent-процесса,
         то значение status теряется.
            
               Возвращаемое значение.
            
               Возвращаемого значения нет.
               См.также  abort,  execl,  execle,  execlp,  execv,  execve,
         execvp,  onexit,  spawnl,  spawnle,  spawnlp,  spawnv,   spawnve,
         spawnvp, system.
            
               Пример:
            
            #include <process.h>
            #include <stdio.h>
            
            FILE *stream;
            .
            .
            .
            
               /*  следующие  операторы вызывают завершение процесса после
         обновления буферов и закрытия открытых файлов */
            
            if((stream=fopen("data","r"))==NULL) {
                fprintf(stderr,"couldn't open data file\n");
                exit (1);
                }
               /* следующие операторы вызывают немедленное завершение про-
         цесса, если файл не может быть открытым */
            
            if((stream=fopen("data","r"))==NULL)
             
                {
      
                fprintf(stderr,"couldn't open data file\n");
                _exit (1);
               
                }
               
               

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог