Информация об изменениях

Сообщение Re[6]: Сходи хоть на одно собеседование, узнаешь о себе мног от 21.10.2022 1:04

Изменено 21.10.2022 1:06 vsb

Re[6]: Сходи хоть на одно собеседование, узнаешь о себе много н
Здравствуйте, cppguard, Вы писали:

C>А кто определяет, что являетя базовым, а что нет? Вот, например, задачка на основе "базовых вещей": нужно написать функцию, которая пишет в файл с использованием non-blocking I\O. То есть, пишет сколько может, а потом сообщает о переполнении буффера записи. И если сразу не увидели подвох, а знание "базовых вещей" подвело, то даю подсказку: non-blocking I\O не работает для обычных файлов. Но у вас вот такая вот система, что FS смонтирована через NFS, но доступа к драйверу NFS нет. Как-то нужно выкрутиться. Задача вполне реальная с прошлого проекта, решается стандартными средствами системного программирования.


Если не выпендриваться — запустить отдельный поток и в него передавать команды на запись и тд через обычные примитивы межпоточного взаимодействия. И там уже буфер держать. Если write сразу вернул управление, значит записанные байты уехали в буфер операционной системы. Если за некоторое время не вернул, значит поток повис на записи и буфер заполнен. Вызывающее приложение получает сигнал о том, буфер переполнен.

Если выпендриваться, я бы через io_uring попробовал, вроде он поддерживает асинхронную запись в файлы.

А как правильно? Я вообще в системном программировании ни гу-гу.
Re[6]: Сходи хоть на одно собеседование, узнаешь о себе мног
Здравствуйте, cppguard, Вы писали:

C>А кто определяет, что являетя базовым, а что нет? Вот, например, задачка на основе "базовых вещей": нужно написать функцию, которая пишет в файл с использованием non-blocking I\O. То есть, пишет сколько может, а потом сообщает о переполнении буффера записи. И если сразу не увидели подвох, а знание "базовых вещей" подвело, то даю подсказку: non-blocking I\O не работает для обычных файлов. Но у вас вот такая вот система, что FS смонтирована через NFS, но доступа к драйверу NFS нет. Как-то нужно выкрутиться. Задача вполне реальная с прошлого проекта, решается стандартными средствами системного программирования.


Если не выпендриваться — запустить отдельный поток и в него передавать команды на запись и тд через обычные примитивы межпоточного взаимодействия. И там уже буфер держать. Если write сразу вернул управление, значит записанные байты уехали в буфер операционной системы. Если за некоторое время не вернул, значит поток повис на записи и буфер заполнен. Вызывающее приложение получает сигнал о том, буфер переполнен.

Если выпендриваться, я бы через io_uring попробовал, вроде он поддерживает асинхронную запись в файлы.

А как правильно? Я вообще в системном программировании ни гу-гу. Наверное через какие-то ioctl-ы должен быть доступ к такой информации, я бы в этом направлении ещё покопал.