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

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

Войти
Регистрация
Восстановить пароль
 
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127
#1

Запись в канал - C++

06.06.2013, 15:52. Просмотров 192. Ответов 0
Метки нет (Все метки)

Дикая проблема... Уже устал мучаться с ней... Дело вот в чем:
Пытаюсь записать в канал массив, но ничего не выходит... вот как я это делаю, в чем ошибка, подскажите пожалуйста...
Записываю в main поэтому можете сразу перелистывать на функцию main()
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include<clocale>
#include <stdio.h>
#include <unistd.h>
#include <unistd.h>
#include <iostream>
#include <cstdlib>
#include <sys/types.h>
#include <sys/wait.h>
 
using namespace std;
 
//Функция введения промежутка
void entry_period(int &A, int &B)
{
    printf("Введите промежуток од А до B: ");
    scanf("%d%d", &A,&B);
}
 
//функция ввода С-элементов
int *input_C_elements(const int c, int A, int B, int &amount)
{
    int *C;
    C = new int[c];
    printf("\nВведите С-элементы:\n");
    for(int i=0; i<c; i++)
    {
        printf("Введите %d С-элемент ", i+1);
        scanf("%d", &C[i]);
        if(C[i]>=A && C[i]<=B)
            amount++;
    }
    printf("\n\n\n %d \n\n\n", amount);
    return C;
}
 
//Функция вывода исключений
void withdrawal_exemptions(int A, int B, int *C, int c)
{
    printf("\nВведите элементы массива удовлетворяющие следующим свойствам:");
    printf("\n1. Элементы массива должны находится в промежудке от %d до %d", A,B);
    printf("\n2. Элеменами массива не могут быть следующие числа: ");
    for(int i=0;i<c;i++)
        printf("%d ",C[i]);
}
 
//ввод заключительного массива
int *input_array(int A, int B, int *C, int c, int amount)
{
    int buf;
    printf("\nРазмер массива = %d", (B-A-amount));
    int *mas;
    mas=new int[B-A-amount];
    for(int i=0;i<(B-A-amount);i++)
    {
        printf("\nВведите %d элемент массива ",i+1);
        scanf("%d",&buf);
        for(int j=0;j<c;j++)
        {
            if(buf==C[j])
            {
                printf("\nВведенное число равно запрещенному числу! а именно %d", C[j]);
                printf("\n****************Повторите ввод!****************\n");
                if(i==-1)
                {
                    i=-1;
                }
                else
                {
                    i--;
                }
                break;
            }
        }
        if(buf<A || buf>B)
        {
            printf("\nВведенное число не входит в промежуток от %d до %d", A,B);
            printf("\n****************Повторите ввод!****************\n");
            i--;
        }
        else
        {
            mas[i]=buf;
        }
    }
    printf("\n\n*********************Полученный массив:*********************\n");
    for(int i=0;i<(B-A-amount);i++)
    {
        printf("%d ", mas[i]);
    }
    return mas;
}
 
//нахождение среднего арифметического
int find_arithmetic_mean(int A, int B, int amount, int *mas)
{
    float sr=0;
    printf("\n\n*************Нахождение среднего арифмитического************\n");
    for(int i=0;i<(B-A-amount);i++)
    {
        sr=sr+mas[i];
    }
    sr=sr/(B-A-amount);
    return sr;
}
 
int main()
{
//  setlocale(LC_ALL,"rus");
    int A=0,B=0;
    int c;
    int *C;
    int amount=0;
    int fd[2];
    char s[100];
    if(pipe(fd)<0)
    {
        printf("Не удалось создать кaнал!");
        return 0;
    }
    if(fork()==0)
    {
        entry_period(A,B);
        write(fd[1],&A,sizeof(int));
        write(fd[1],&B,sizeof(int));
        return 1;
    }
    wait(0);
    read(fd[0],&A,sizeof(int));
    read(fd[0],&B,sizeof(int));
    
    printf("\nВведите колличество С-элементов ");
    scanf("%d",&c);
    if(fork()==0)//Тут начинается процесс, в котором записываю в канал массив
    {
        C=input_C_elements(c,A,B,amount);
        write(fd[1],&amount, sizeof(int));
        write(fd[1], C, sizeof(int));//непосредственная запись
        return 1;
    }
    wait(0);
    read(fd[0],&amount,sizeof(int));
    read(fd[0],C,sizeof(int)*amount);//и считывание записанного
/*
    if((B-A)<=amount)
    {
        printf("Аварийный выход!\n");
        return 0;
    }
    int *mas;
    if(fork()==0)
    {
        withdrawal_exemptions(A,B,C,c);
        return 0;
    }
    wait(0);
    if(fork()==0)
    {
        mas=input_array(A,B,C,c,amount);
        return 0;
    }
    wait(0);
    float sr;
    sr=find_arithmetic_mean(A,B,amount,mas);
    printf("\nСреднее арифмитическое равно: %f\n\n", sr);
 
    close(fd[0]); close(fd[1]);
*/
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2013, 15:52     Запись в канал
Посмотрите здесь:

Некорректная запись/чтение в pipe канал - C++
Здравствуйте! Надо создать клиент-серверную модель. Аргумент командной строки клиента содержит путь до папки, этот путь передаётся на...

Канал между процессами - C++
Задача у программы такова. Имеется основная программа(main) и две дополнительных(prc1 и prc2). В prc1 и prc2 стоит прогресс бар, который...

Канал с гайдом по С++ (Visyal Studio) - C++
Подскажите пожалуйста канал на YouTube или где нибудь еще с гайдам по С++ (Visyal Studio). Заранее благодарен!

Ответить клиенту через именованный канал результатом выполнения команд сервером, к примеру dir на сервере - C++
Есть сервер и клиент для обмена сообщениями при помощи именованных каналов. Клиент посылает серверу запрос на выполнение одной из команд:...

Поля структуры: код телевизионного канала, название, цена. Операция: найти самый дорогой канал - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include &lt;string&gt; using namespace std; int...

Чтение и запись в канал (pipe) - C#
Вот читаю пример работы именованных каналов на msdn и не совсем понимаю, почему сначала считывается один байт, а потом домножается на 256...

Syslog и запись в именованный канал - FreeBSD
Всем доброго времени суток. Захотел я реализовать такую связку squid -&gt; syslog -&gt; squidpipe -&gt; logs_to_mysql -&gt; mysql. То есть, сквид...

Запись в канал (Named Pipe) - C++
Здравствуйте. Благодарю за внимание :) Мне нужно послать сообщение с одного процесса (клиента) на другой (сервер) и наоборот (запущенных на...

Запись с микрофона производится только в левый канал - Звук, акустика
Записываю видео при этом, раньше звук записывался на обе стороны, сейчас запись производится только на левую. Караоке-микрофон(через...

Канал Wi-fi 12 км. - Wi-Fi
Добрый день. Есть такой проект. надо организовать покрытие в центре города примерно 12 км в длину и 1-1.5 в ширину. Т.е. что бы человек...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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