Я хочу создать программу, которая подсчитывает число символов в тексте, для этого я хочу, чтобы моя программа работала с взаимодействием между родителями и дочерними процессами, идея проста: я хочу, чтобы родитель прочитал stdin, отправляю символы в дочерний процесс кто посчитает и вернет результат.
Я хочу вернуть результат после прочтения всего текста, тогда родитель будет отображать результат следующим образом:
За такой текст "AaaaA" я получаю:
«а» отображается 3 раза
'A' отображается 2 раза
Чтобы выполнить мою задачу, которую я использовал для и 2 канала, вот пример моего кода:
// I'll skip the code for variable and file input because i have a specific question.
.......
// basic code
if( pid_child == 0){
// child code
close(pipe_1[1]);
close(pipe_2[0]);
read(pipe_1[0], &caract, sizeof(char));
}else {
// parent area
while((c = fgetc(file)) != EOF){
if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')){
close(pipe_1[0]);
close(pipe_2[1]);
write(pipe_1[1], &c, sizeof(char));
}
}
}
Я знаю, что когда вы fork()
родительский процесс, вы создаете копию этого процесса, и я хочу знать, как мне сохранить весь результат в дочернем процессе, тогда я бы прочитал их или вызвал их в конце чтения мой файл?
Например, я хочу создать двумерный динамический массив, который может содержать все символы, если первое измерение и число вхождений во втором измерении.
Для предыдущего примера я бы
int **array;
array = malloc(2 * sizeof(int *));
и это даст мне:
A 2
3
Я знаю, как общаться между ребенком и родителем и обратно, но четвертым
моя проблема заключается в том, что я хочу, чтобы после прочтения всего текста абсолютно точно вызывался конечный продукт этого массива, чтобы родитель не мог получить результат до этого?
Есть ли способ сделать это, я не знаю, правильно ли это, но я хочу, чтобы этот массив действовал как локальная переменная в дочернем процессе, и я хочу обновлять его каждый раз, когда получаю такие же или новые символы?
Спасибо