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

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

Восстановить пароль Регистрация
 
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127
06.06.2013, 15:52     Запись в канал #1
Дикая проблема... Уже устал мучаться с ней... Дело вот в чем:
Пытаюсь записать в канал массив, но ничего не выходит... вот как я это делаю, в чем ошибка, подскажите пожалуйста...
Записываю в 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     Запись в канал
Посмотрите здесь:

C++ Канал между процессами
C++ Поля структуры: код телевизионного канала, название, цена. Операция: найти самый дорогой канал
Нет вывода и неправильная запись (запись) C++
C++ Канал с гайдом по С++ (Visyal Studio)
C++ люди добрые! нужно программа инверсная запись чисел, запись из инверсной в обычную
C++ Дана строка. Определить, представляет ли она собой запись целого числа или запись дробного числа
[Файлы] Запись-чтение-запись. Почему не прокатывает? C++
C++ Ответить клиенту через именованный канал результатом выполнения команд сервером, к примеру dir на сервере

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

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

Текущее время: 05:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru