Shell и дескрипторы потоков.
Добавлено: 25 мар 2004 22:28
Требуется написать нечто на сях под юникс. Рекомендуется использовать системные вызовы типа cal или например date. Проблема в том, что либо придется возиться с распараллеливанием, либо с чтением из файла. А именно:
Распараллеливание:
Чтение (более изящно):
А что хочется - создать pipe, после чего один из его концов подставить в системный вызов (аналогично второму случаю, но вместо tmp будет тот самый дескриптор). Вопрос: а будет ли вообще такое работать? Логика подсказывает, что да, но проверить нет возможности.
На чистом шелле или других скриптовых языках пока писать нельзя. Вернее можно, но тогда задание "написать на С" останется.
Распараллеливание:
- Код: Выделить всё
if (fork()==0) {
...склепать межпроцессный канал
execl("/bin/cal", "cal", "0")
} else {
...опять-таки, обработать межпроцессный канал и почитать из него
}
Чтение (более изящно):
- Код: Выделить всё
system("cal|cat>tmp");
...читаем из файла tmp...
system ("rm tmp");
А что хочется - создать pipe, после чего один из его концов подставить в системный вызов (аналогично второму случаю, но вместо tmp будет тот самый дескриптор). Вопрос: а будет ли вообще такое работать? Логика подсказывает, что да, но проверить нет возможности.
На чистом шелле или других скриптовых языках пока писать нельзя. Вернее можно, но тогда задание "написать на С" останется.