Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 16.09.2010
Сообщений: 23

Сортировка строки, используя fork() и pipe

14.05.2012, 11:55. Показов 2026. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дали задание используя системный вызов fork() и pipe. Решить какую-то задачу.
Я решил сделать "сортировку пузырьком".
Вот код

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
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
void bubble(char *items, int count);
 
int main(void)
{
  char s[255];
 
  printf("Input string:");
  gets(s);
  bubble(s, strlen(s));
  printf("Sorted string: %s.\n", s);
 
  return 0;
}
/* Пузырьковая сортировка. */
void bubble(char *items, int count)
{
  int a, b;
  char t;
 
  for(a=1; a < count; ++a)
    for(b=count-1; b >= a; --b) {
      if(items[b-1] > items[b]) {
        /* exchange elements */
        t = items[b-1];
        items[b-1] = items[b];
        items[b] = t;
      }
    }
}


А как теперь этот код передалать используя fork() и pipe.

Если я правильно понял задание то нужно создать процесс(потомок) , используя fork(), затем отсортировать сроку и записать её в канал(write), а затем сам результат прочитать в Родителе(read).

Я вот немного не пойму в где производить саму сортировку. в Потомке или в Родителе? и как правильно всё туда записать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2012, 11:55
Ответы с готовыми решениями:

Быстрая сортировка fork и pipe
помогите переделать данный код в быструю сортировку #include &lt;stdio.h&gt; #include &lt;unistd.h&gt; #include &lt;sys/types.h&gt; #include...

Пустые строки в файле с использованием pipe, fork, exec, dup
Всем привет, для написания сабжа задумал использовать такую команду : grep -e '^$' argv | wc --lines По факту, мне нужно ручками...

Pipe, fork, shared memory
Доброго времени суток. Помогите пожалуйста написать программу: Процесс читает с клавиатуры и пишет в пайп, его ребенок читает из этого...

3
Автор FAQ
 Аватар для Чистый
2733 / 1429 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
14.05.2012, 13:52
порождайте дочерний процесс используй fork в нем читайте данные для сортировки сортируйте их, после чего родителю отправляйте что сортировка закончена и он считает результаты сортировки и отобразит на экране...
1
0 / 0 / 0
Регистрация: 16.09.2010
Сообщений: 23
15.05.2012, 00:28  [ТС]
Цитата Сообщение от Чистый Посмотреть сообщение
порождайте дочерний процесс используй fork в нем читайте данные для сортировки сортируйте их, после чего родителю отправляйте что сортировка закончена и он считает результаты сортировки и отобразит на экране...
Как вы посоветовали я сделал
Вот код. Всё вроде как работает. Не могли бы вы проверить правильно ли я вас понял?
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
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string.h>
 
void bubble(char *items, int count);
 
int main(void)
{
        int     fd[2], nbytes;
        pid_t   childpid;
        char    string[80] ;
        char    readbuffer[80];
 
        pipe(fd);
        
        if((childpid = fork()) == -1)
        {
                perror("fork");
                exit(1);
        }
 
        if(childpid == 0)
        {
                /* потомок .закрываем входной поток pipe */
                close(fd[0]);
 
                printf("input string \n");
                gets(string);
                bubble(string,strlen(string));//сортировка
 
                /* Отправляем строку через выходной поток pipe */
                write(fd[1], string, (strlen(string)+1));
                exit(0);
                
        }
        else
        {    
            
                /* Родительский процесс закрывает выходной поток  pipe */
                close(fd[1]);
 
                /* Чтение строки из  pipe */
                nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
                printf("Received sorted string: %s\n", readbuffer);
 
                printf("nbytes :%d\n",nbytes);
         /* Родительский процесс закрывает входной поток  pipe */
                close(fd[0]);
                
        }
        
        return(0);
}
void bubble(char *items, int count)//сортировка пузырёком
{
  int a, b;
  char t;
 
  for(a=1; a < count; ++a)
    for(b=count-1; b >= a; --b) {
      if(items[b-1] > items[b]) {
        /* exchange elements */
        t = items[b-1];
        items[b-1] = items[b];
        items[b] = t;
      }
    }
}
0
0 / 0 / 0
Регистрация: 22.05.2015
Сообщений: 61
22.05.2015, 19:33
Здравствуйте, помогите мне пожалуйста в linux, как работает команда join?

Добавлено через 2 минуты
и как можно написать команду join так, чтобы я мог найти данные одной таблицы по столбцу из другой, как это сделать?

Добавлено через 27 секунд
я уже голову всю сломал и застрял

Добавлено через 1 минуту
а то я весь день просидел и ничего не продвинулось!!!!!!!!!!!!!!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2015, 19:33
Помогаю со студенческими работами здесь

Распараллелить задачу, ипользуя при системный вызов fork (), и трубу pipe
Дали задание распараллелить какую то задачу, ипользуя при этом системный вызов fork(), и трубу pipe. К примеру, что б потомке считалась...

Отправка сообщений между дочерними и родительским процессами (fork,pipe,write,read)
Здравствуйте, помогите реализовать отправку сообщений по следующей схеме: Попытался самостоятельно реализовать первую схему, вот что...

Запуск демона, используя fork
Здравствуйте. помогите понять принцип работы демона. &quot;по форуму лазил статьи читал но не как не могу догнать определены моменты&quot;. В...

Генерация древа процессов используя fork
Битый час уже пытаюсь создать древо процессов по заданному образцу (0 1 1 2 2 5 6). То есть первый процесс не имеет родителя среди ваших...

Fork() и сортировка столбцов матрицы
В общем такая беда. Целый день не могу понять что не так в моем коде. Задание такое. Мне нужно отсортировать каждый столбец заданной...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru