Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
#1

Возможно ли у семейства фунций exec получить возвращаемое значение? - C++

26.01.2014, 15:09. Просмотров 516. Ответов 9
Метки нет (Все метки)

Возможно ли у семейства фунций exec получить возвращаемое значение?
прототип позволяет:
C++
1
2
3
4
5
 int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg , ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
Однако, рядом указано, что Возвращение значения какой-либо из функций exec приведет к ошибке. При этом возвращаемым значением будет -1 и глобальной переменной errno будет присвоен код соответствующей ошибки.
Я пробывал возвратить, но даже -1 не возвратился, вообще глухо!!
Возвращаемое значение необходимо для того, чтобы осознать, что процесс завершился не успешно.
Заранее в процессе прописано, что exit(-1).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2014, 15:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возможно ли у семейства фунций exec получить возвращаемое значение? (C++):

Возвращаемое значение - C++
Как сделать так, что бы в зависимости от подаваемых аргументов, функция возвращала разные значения? Пробовал через шаблоны, но не...

Возвращаемое значение функции - C++
array& array::operator = (const array &q) { if (this != &q) { delete s; s=new int; for(len=0;len<q.len;s=q.s,len++) ...

Возвращаемое значение в class - C++
Здравствуйте можно ли как-то возвраить значение основной программе, если операцию я проводил в в class?

Возвращаемое ссылочное значение - C++
int a = 1; int& func(){return a;} void main() { int b = func(); b+=111; cout << b << " " << a; system("pause"); ...

Возвращаемое значение из класса - C++
#include <iostream> using namespace std; class Integer { public: int value; Integer(int i) { value = i; } const...

Значение, возвращаемое функцией (C++) - C++
В общем, задача такая. Написать программу, печатающую все вводимые символы в нижнем регистре. Программа должна использовать цикл while....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
26.01.2014, 17:22 #2
Функции exec возвращают значение только в случае ошибки - т.е. если процесс не удалось запустить.

То, о чем ты пишешь - это не возвращаемое значение функции, а код завершения процесса. См man 2 wait - аргумент status.
1
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
26.01.2014, 17:35  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
Функции exec возвращают значение только в случае ошибки - т.е. если процесс не удалось запустить.

То, о чем ты пишешь - это не возвращаемое значение функции, а код завершения процесса. См man 2 wait - аргумент status.
а можете подсказать, пожалуйста, как тогда определить что процесс завершился не корректно?
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
26.01.2014, 17:45 #4
Проверять код возврата. Как правило, ошибке соответствует ненулевой.
Как из статуса получить код завершения написано в man 2 wait.
0
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
26.01.2014, 21:30  [ТС] #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Проверять код возврата. Как правило, ошибке соответствует ненулевой.
Как из статуса получить код завершения написано в man 2 wait.
а причём здесь функция wait??? дочерний же вызывает функцию exec?
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
26.01.2014, 21:35 #6
А родительский wait. И аргумент у нее - указатель на переменную status, где и сохраняется информация о завершении дочернего процесса. Все описано в мане.
1
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
27.01.2014, 15:45  [ТС] #7
C++
1
2
3
я вот к этому пришёл:
if ((idd = wait(&status)) == (-1))
                err_sys("wait error");
но выходит ошибка: ошибка: нет декларации «err_sys» в этой области видимости
заголовочные файлы вроде включены
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <strings.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "stdlib.h" //для system
#include <string.h>
#include <cstring> //для length() (определение длины)
#include <pthread.h> //для потока
#include <vector> //vector, iterator, algorithm для работы с vector
#include <iterator>
#include <algorithm>
#include <fstream>
#include <errno.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdio.h>
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
27.01.2014, 15:50 #8
Это не библиотечная функция, реализация должна быть приведена там же, где Вы нашли этот пример.
0
танкист34
-62 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 328
27.01.2014, 15:52  [ТС] #9
Цитата Сообщение от 0x10 Посмотреть сообщение
Это не библиотечная функция, реализация должна быть приведена там же, где Вы нашли этот пример.
а вот нашёл
C++
1
#define err_sys(x) { perror(x); exit(1); }
т.е. нет стандартных функций получения кода переменной errno?
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
27.01.2014, 15:55 #10
Кажется, вопрос не в ту степь.
Если нужно узнать значение переменной errno, то подключаем errno.h и используем саму переменную errno.
Если нужно вывести какое-то читамое сообщение об ошибке - смотрим man 3 perror. Если нужно что-то большее - в последнем же мане есть ссылки на другие функции по теме.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 15:55
Привет! Вот еще темы с ответами:

Возвращаемое значение функции - C++
Здарвствуйте. Моя задача состоит в написании следующей программы: вычислить среднее арифметическое значение элементов матрицы W(L,L),...

Возвращаемое значение (класс) - C++
class shtraf { public: struct sh { int vel; char number; sh *next; };

Возвращаемое значение функции - C++
Добрый день. Есть функция: TextString InfoBox::name(unsigned int i) const { if(i&lt;this-&gt;count()) { TextLabel...

возвращаемое значение cos() - C++
Всем доброго времени суток. не могу понять почему cos() возвращает такие значения... cout&lt;&lt;&quot;F &quot;&lt;&lt;cos(90*M_PI/180.0)&lt;&lt;endl; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.01.2014, 15:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru