Файловые дескрипторы: возможно ли неблокировать `запись` произвольных длин данных? - PullRequest
1 голос
/ 28 января 2011

Можно ли читать и записывать данные произвольного размера, используя дескриптор файла в качестве дескриптора (возможно, с помощью специального драйвера ядра)?

Или существует ли обязательный для ОС предел размера буфера, используемого для передачи данных через файловые дескрипторы?

Я знаю, что

  • файлов блок из-за медленного времени доступа к диску
  • сокеты (поток и дграмма) имеют максимальные размеры пакетов
  • 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);
}
...