ファイル記述子をハンドルとして (おそらくカスタム カーネル ドライバーを使用して) 使用して、任意のサイズのデータを読み書きすることは可能ですか?
または、ファイル記述子を介してデータを転送するために使用されるバッファ サイズに OS によって義務付けられた制限はありますか?
そんなこと知ってる
- ディスク アクセス時間が遅いためにファイルがブロックされる
- ソケット(ストリームと dgram) には最大パケット サイズがあります
- パイプとfifosにも何らかのバッファ制限があるようです
書き込み時にブロックしない fd を作成したいと思います。
例
使用法は次のようになります。
fd = open("/dev/new_buffer")
write(fd, data, huge_size, NON_BLOCK)
read(fd, data2, huge_size, NON_BLOCK)
バックエンドの実装は次のようになります (単純化しすぎてすみません):
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);
}