Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
alexxx1
0 / 0 / 0
Регистрация: 31.10.2009
Сообщений: 9
1

процессы

15.01.2010, 11:34. Просмотров 1298. Ответов 1
Метки нет (Все метки)

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

вот что получилось:
main.cpp
Код
#include <iostream>
#include <vector>
#include <unistd.h>
#include <string>
#include <process.h>

using namespace std;

int main(int argc, char *argv[])
{

    cout << "Vvedite kollichestvo programm:"<<endl;
    unsigned n;
    cin>>n;
    std::vector <string> v;
    v.resize(n);
    if(n<=0) return 0;
    cout << "Vvedite imena programm:"<<endl;
    for (int i =0; i<n; ++i)
    {
        cin>>v[i];
    }

f(n,v);
cout<<"end"<<endl;
    return EXIT_SUCCESS;
}
proc.h

Код
#ifndef PROCESS_H
#define PROCESS_H
#include<unistd.h>
#include<iostream>
#include <vector>
#include<string>
class Process
{
public:
    Process();
    ~Process() {}
    operator bool() const; 
    pid_t id() const;
    bool run(std::string a);
    
protected:
    int action(std::string a);
private:
    Process(pid_t id);
private:
    pid_t pid; 
};
inline Process::operator bool() const
{
    return pid != 0;
}
inline pid_t Process::id() const
{
    return pid;
}
void f(int n, std::vector <std::string> v);
#endif
proc.cpp

Код
#include "process.h"
#include <cstdlib>
#include <string>
#include <vector>
#include <signal.h>
#include <sys/wait.h>
using namespace std;

Process::Process()
        : pid(0)
{
}
Process::Process(pid_t id)
        : pid(id)
{
}
bool Process::run(std::string a)
{
    if ( pid )
        return false;
    pid = fork();
    switch ( pid )
    {
    case -1:
        pid = 0;
        return false;
    case 0:
        pid = getpid();
        exit(action(a));
    }
    return true;
}

int Process::action(string a)
{
system(a.c_str());
return 0;
}

void f(int n, vector <string> v)
{
vector <Process> p(n);
for(int i=0; i<n;++i)
{
p[i].run(v[i]);
}
return;
}

Всё работает
Но значительную часть этого взял из методички - вроде понимаю что здесь происходит - но препод придирается
Не могли бы рассписать - что здесь к чему?
Особенно интересуют это :

Код
class Process
{
public:
    Process();
    ~Process() {}
    operator bool() const; 
    pid_t id() const;
    bool run(std::string a);
    
protected:
    int action(std::string a);
private:
    Process(pid_t id);
private:
    pid_t pid; 
};
inline Process::operator bool() const
{
    return pid != 0;
}
inline pid_t Process::id() const
{
    return pid;
}
void f(int n, std::vector <std::string> v);
#endif
и
Код
Process::Process()
        : pid(0)
{
}
Process::Process(pid_t id)
        : pid(id)
{
}
..................
void f(int n, vector <string> v)
{
vector <Process> p(n);
for(int i=0; i<n;++i)
{
p[i].run(v[i]);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2010, 11:34
Ответы с готовыми решениями:

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

Процессы и каналы
Привет. Есть задание Всё понятно, кроме того, что выделено жирным,...

Процессы и Демоны
Добрый день нужно написать 2 лабы но я и с линксом плохо знаком не то что с...

Процессы в Linux
Добрый день. Пытаюсь разобраться с процессами. Пишу программу с применением...

Процессы и файлы в Linux
Определите, что происходит в родительском процессе, если дочерний процесс...

1
Gravity
569 / 563 / 64
Регистрация: 29.01.2009
Сообщений: 1,274
15.01.2010, 15:51 2
Околосистемное программирование на С++ это все-таки так забавно для юниксов...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2010, 15:51

И снова процессы и сигналы
доброго дня всем, снова набивший всем оскомину вопрос о процессах и сигналах....

Процессы под unix
Есть такой код, который запускает файлы f1.out и f2.out, если их передать в...

ПРОЦЕССЫ И СИГНАЛЫ ОС UNIX
Здравствуйте,очень нужна Ваша помощь в создании программы на C++. Владея,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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