Гость Опубликовано 21 мая, 2005 Жалоба Поделиться Опубликовано 21 мая, 2005 Нужна помощь со следующим заданием: Написать программу слияния двух файлов в третий. Файл-результат формируется чередованием N-ок символов первого и второго файлов (если один из файлов длиннее другого, то его оставшаяся часть приписывается в конец файла-результата). Имена файлов и величина N задаются в командной строке. Исходные файлы читаются разными процессами; эти же процессы по очереди за-писывают по N байт из обрабатываемых ими файлов в файл-результат. Синхронизацию их работы организовать с помощью сигналов. Просьба написать примерный текст проги, т.к. я вообще не знаю как к ней подобраться... ну или подробный алгоритм. Надеюсь на Вашу помощь! Заранее спасибо. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 мая, 2005 Жалоба Поделиться Опубликовано 24 мая, 2005 Cтранное какое-то решение. Зачем именно два процесса? Почему сигналы, а не, к примеру, сокеты? Но это дело хозяйское... Процессы должны знать PID-ы друг друга, чтобы слать друг другу сигналы (man 2 kill). Скорее всего это означает, что один из процессов порождается другим (man 2 fork). Тогда порождаемый знает PPID - PID родителя, а родитель знает PID порожденного процесса. Можно, конечно, запускать оба процесса третьим, но как тогда им узнавать PID-ы - вопрос.. Через файлы, что ли? Или посредством родителя общаться? Муть... Второе, процессы должны обрабатывать (man 2 signal) некий предопределенный сигнал, например SIGUSR1 (man 7 signal). Схему работы можно представить приблизительно следующей: - один процесс начинает работу, ставит на будущее обработчик SIGUSR1 (к примеру), пускает дочерний процесс и спит. - новорожденный инициализируется, ставит обработчик SIGUSR1 (обратно же к примеру), киляет по SIGUSR1 родительский процесс и засыпает. Далее пошел цикл: - процесс (кто там на очереди) получает сигнал, вваливается в обработчик, делает свое дело, восстанавливает обработчик, киляет другой процесс... Два замечания юному сигналисту - На время обработки сигнала выполнение основной "ветки" программы приостанавливается. - Обработчик сигнала, как я уже сказал, нужно восстанавливать - он ставится только на одно "получение" сигнала, поэтому signal нужно вызывать каждый раз в обработчике, если хочешь его в другой раз опять словить. Впрочем, об этом в документации сказано. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.