Приветствую.
В продолжении темы
Задача отдать одновременно записываемый видео архив в сеть с флешки без файловой системы в один поток после успешного боевого тестирования идеи rtsp публикацией перетекла в задачу многопотока (предварительно до 50 штук). Как советовали в той теме решил попробовать mmap всего сырого носителя иба ручное управление буфером как то не улыбает.
Наваял нечто похожее
if ((fd = open(device, O_RDONLY)) < 0)
fprintf(...);
else if ((md = mmap(NULL, partition_size, PROT_READ, MAP_SHARED, fd, (first_lba - 1) * sector_size + 1)) == MAP_FAILED)
close(fd);
else if (madvise(md, partition_size, MADV_SEQUENTIAL) < 0)
fprintf(...);
Вопросы
- корректно ли выполнять madvise и munmap без
offset
с учетом того что он не нулевой только на величину partition_size? - при обращении к
(uint8_t*)md + позиция_байта
offset надо учитывать? - на всякий случай - потокобезопасен п.2 так же как и системный вызов read/pread с учетом того что выполняется запись через
fwrite/fflush
со своим дескриптором?