Можно ли читать и записывать данные произвольного размера, используя дескриптор файла в качестве дескриптора (возможно, с помощью специального драйвера ядра)?
Или существует ли обязательный для ОС предел размера буфера, используемого для передачи данных через файловые дескрипторы?
Я знаю, что
- файлов блок из-за медленного времени доступа к диску
- сокеты (поток и дграмма) имеют максимальные размеры пакетов
- pipe и fifos также, похоже, имеют какое-то ограничение буфера
Я хотел бы создать fd, который никогда не будет блокировать записи.
Пример
Использование будет примерно так:
fd = open("/dev/new_buffer")
write(fd, data, huge_size, NON_BLOCK)
read(fd, data2, huge_size, NON_BLOCK)
Backend реализация будет выглядеть примерно так
(извините за упрощение):
on_write(fd, data, size, opts)
{
void* buffers[fd] = malloc(size);
memcpy(buffers[fd], data, size);
}
on_read(fd, data, size, opts)
{
memcpy(data, buffers[fd], size);
}