Перейти к содержанию

Нужна помощь в работе с сигналами.


Рекомендуемые сообщения

Нужна помощь со следующим заданием:

Написать программу слияния двух файлов в третий. Файл-результат формируется чередованием N-ок символов первого и второго файлов (если один из файлов длиннее другого, то его оставшаяся часть приписывается в конец файла-результата). Имена файлов и величина N задаются в командной строке. Исходные файлы читаются разными процессами; эти же процессы по очереди за-писывают по N байт из обрабатываемых ими файлов в файл-результат. Синхронизацию их работы организовать с помощью сигналов.

Просьба написать примерный текст проги, т.к. я вообще не знаю как к ней подобраться... ну или подробный алгоритм.

Надеюсь на Вашу помощь! Заранее спасибо.

Ссылка на комментарий
Поделиться на другие сайты

Cтранное какое-то решение. Зачем именно два процесса? Почему сигналы, а не, к примеру, сокеты? Но это дело хозяйское...

Процессы должны знать PID-ы друг друга, чтобы слать друг другу сигналы (man 2 kill). Скорее всего это означает, что один из процессов порождается другим (man 2 fork). Тогда порождаемый знает PPID - PID родителя, а родитель знает PID порожденного процесса. Можно, конечно, запускать оба процесса третьим, но как тогда им узнавать PID-ы - вопрос.. Через файлы, что ли? Или посредством родителя общаться? Муть...

Второе, процессы должны обрабатывать (man 2 signal) некий предопределенный сигнал, например SIGUSR1 (man 7 signal).

Схему работы можно представить приблизительно следующей:

- один процесс начинает работу, ставит на будущее обработчик SIGUSR1 (к примеру), пускает дочерний процесс и спит.

- новорожденный инициализируется, ставит обработчик SIGUSR1 (обратно же к примеру), киляет по SIGUSR1 родительский процесс и засыпает.

Далее пошел цикл:

- процесс (кто там на очереди) получает сигнал, вваливается в обработчик, делает свое дело, восстанавливает обработчик, киляет другой процесс...

Два замечания юному сигналисту Smile

- На время обработки сигнала выполнение основной "ветки" программы приостанавливается.

- Обработчик сигнала, как я уже сказал, нужно восстанавливать - он ставится только на одно "получение" сигнала, поэтому signal нужно вызывать каждый раз в обработчике, если хочешь его в другой раз опять словить. Впрочем, об этом в документации сказано.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...