Интересует такой вопрос: как прочитать файл, представленный потоком(std::ifstream) используя k процессов с использованием fork()? Знаю как обработать его в k потоков, разделив файл(поток) на блоки кратные k потокам.
Нечто вроде:
int pid;
long offset;
long SegmetSize = ??; // Размер сегмента файла для одного процесса
// Мы в родительском процессе - открываем файл
FILE *f;
f = fopen(...);
if (f == NULL) ...
// Запускаем дочерние
for (j=0; j<k; j++) {
pid = fork();
if (pid < 0) {
// Обрабатываем ошибку
} else if (pid > 0) {
// Мы в родительском процессе - продолжаем запуск
continue;
} else {
// Мы в дочернем процессе - позиционируемся на нужный участок файла
offset = j * SegmetSize;
rc = fseek(f, offset, SEEK_SET);
// И начинаем обработку с этой точки
while (...) {
fread(..., f);
// Что-то делаем
}
}
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости