这个问题是为什么我们需要将缓冲区传递给系统调用才能返回信息的延伸?为什么系统调用不能在内部分配缓冲区?因为内存分配是将回调传递给系统调用的众多动机之一。
我想将分配回调传递给需要缓冲区的原始系统调用变体,因为原始系统调用可能会在写入缓冲区之前知道要分配的缓冲区大小。
许多文件系统 API(不仅仅是 posix/*nix,Windows/NT 也这样做)总是要求您传递 ax 字节路径缓冲区(x 将是 256 或 1024 或 4096 或 MAX_PATH)。您仍然必须将 x 传递给函数以指示缓冲区大小,如果它需要比缓冲区允许的更多空间,该函数可能会失败。
是否存在系统调用不能调用用户空间函数的限制?是否可能,但由于系统调用必须保留调用用户空间上下文和回调用户空间上下文而复杂?从线程切换的角度来看,所有系统调用是否都应该是原子的,并且从系统调用中调用用户空间代码会破坏这种原子性?