Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
1 / 1 / 1
Регистрация: 22.12.2009
Сообщений: 35
1

Межпроцессное взаимодействие

11.04.2012, 02:36. Показов 5142. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста. Работаю в Unix, на чистом Си. Задача следующая: из моей программы нужно запустить новый процесс с передачей аргумента. Далее в этом процессе идут некоторые вычисления и вернуть 1ой программе результат через stdout.
Как мне запустить новый процесс? вывод через функцию printf() запишет результат в stdout? Если нет, то как туда записать ? Как выловить данные 1ой программы из stdout?
Мне хотябы чуток теории и какие функции использовать. Заранее спасибо за ответы.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2012, 02:36
Ответы с готовыми решениями:

Межпроцессное взаимодействие
Здравствуйте. Пытаюсь на чистом СИ записать информацию в канал и считать оттуда в двух разных...

Межпроцессное взаимодействие с помощью сигналов
Добрый вечер! Возникла проблема: Программа моделирования управления движением на уличном...

Межпроцессное взаимодействие через файлы
Здравствуйте!!! Помогите пожалуйста!! Разработать на СИ программу, выполняющую: 1) создание...

Межпроцессное взаимодействие
решаю задачу 2 процесса работают с буффером в разд. памяти. Один пишет в буфер введенный в консоль...

2
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
11.04.2012, 07:49 2
http://citforum.ru/programming/unix/ipc_intro/
1
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
11.04.2012, 08:46 3
Лучший ответ Сообщение было отмечено Killer_Pooh как решение

Решение

Цитата Сообщение от Killer_Pooh Посмотреть сообщение
Как мне запустить новый процесс? вывод через функцию printf() запишет результат в stdout? Если нет, то как туда записать ? Как выловить данные 1ой программы из stdout?
Мне хотябы чуток теории и какие функции использовать. Заранее спасибо за ответы.
Если надо только читать, или только писать данные, то проще всего воспользоваться функцией popen. Обратите внимание, что данная функция popen работает только в одном направление. При попытке открыть pipe сразу в двух режимах, функция вернет значение NULL.
Если Вы хотите и читать и писать одновременно, то Вы можете также создать новый pipe с помощью функции pipe(), создать новый процесс с помощью fork() и exec() и перенаправить его ввод/вывод с помощью dup2().

Работать должно примерно так (не проверял):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <sys/types.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
#define READ 0
#define WRITE 1
 
pid_t open_pipe_to_rw(const char *command, int *infp, int *outfp)
{
    int p_stdin[2], p_stdout[2];
    pid_t pid;
 
    if (pipe(p_stdin) != 0 || pipe(p_stdout) != 0)
        return -1;
 
    pid = fork();
 
    if (pid < 0)
        return pid;
    else if (pid == 0)
    {
        close(p_stdin[WRITE]);
        dup2(p_stdin[READ], READ);
        close(p_stdout[READ]);
        dup2(p_stdout[WRITE], WRITE);
 
        execl("/bin/sh", "sh", "-c", command, NULL);
        perror("execl");
        exit(1);
    }
 
    if (infp == NULL)
        close(p_stdin[WRITE]);
    else
        *infp = p_stdin[WRITE];
 
    if (outfp == NULL)
        close(p_stdout[READ]);
    else
        *outfp = p_stdout[READ];
 
    return pid;
}
 
int main(int argc, char **argv)
{
    int infp = 0, outfp = 0;
    char buf[128] = "";
 
    if (open_pipe_to_rw("sort", &infp, &outfp) <= 0)
    {
        printf("Unable to exec sort\n");
        exit(1);
    }
 
    write(infp, "4\n", 2);
    write(infp, "3\n", 2);
    write(infp, "2\n", 2);
    write(infp, "1\n", 2);
    close(infp);
 
    read(outfp, buf, 128);
    printf("-------- read ---------\n%s\n", buf);
 
    return 0;
}
2
11.04.2012, 08:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2012, 08:46
Помогаю со студенческими работами здесь

Межпроцессное взаимодействие
Задание: Разработать программу, которая по запросу пользователя создает дополнительный...

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

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

Межпроцессное взаимодействие
Всем привет. Нужна помощь в организации следующей схемы. У меня есть программа в которой мне...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru