Гость Опубликовано 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 нужно вызывать каждый раз в обработчике, если хочешь его в другой раз опять словить. Впрочем, об этом в документации сказано. Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.