Ele possui 3 níveis de buffer ou 2 níveis de buffer ao usar a biblioteca stdio?

Ele possui 3 níveis de buffer ou 2 níveis de buffer ao usar a biblioteca stdio?

DeA interface de programação Linux:
(Eu li as seções relacionadas. Colei este diagrama resumido apenas para ilustração.) insira a descrição da imagem aqui

Eu sei disso para IO direto que usa reade writechamadas de sistema. Existem 2 níveis de buffer. read/write buffer+ kernel buffer.

Ao usar stdiochamadas de biblioteca, que são criadas com base em chamadas IO diretas do sistema, é

  1. stdio buffer++ read/write buffer, kernel buffer3 níveis de buffer,

ou

  1. stdioe write/readcompartilham o mesmo buffer, 2 níveis de buffer

stdio calls <---> user buffer<-----> read/write+kernel buffer

?

(Acho que são 2 níveis de buffer, mas quero ter certeza.)

Responder1

No caso comum, existem dois níveis. Um buffer no espaço do usuário é alocado pela biblioteca stdio, e chamadas para puts/printf/fprintf etc colocam caracteres nesse buffer. Em algum estágio (por exemplo, o buffer está cheio ou uma nova linha é escrita e o fluxo está no modo de buffer de linha) a biblioteca stdio chama writepara pedir ao kernel para escrever o buffer. O kernel normalmente copiará o buffer em um buffer do kernel, iniciará o que for necessário para levar os dados ao destino e retornar. O espaço do usuário fica então livre para usar o buffer do espaço do usuário como quiser.

É possível (mas incomum) ter diferentes implementações de stdio que façam isso de maneira diferente.sfiotem uma camada de compatibilidade stdio. Vários esquemas foram propostos para zero copyetc. A questão é que isso stdioinforma qual é o efeito, não como isso é feito.

informação relacionada