[pso] [Tema2][Linux]Buffers

Vlad Dogaru ddvlad at rosedu.org
Tue Apr 20 23:58:03 EEST 2010


Alexandru Juncu wrote:
> Salut.
>
> Am niște neclarități legate de cum ar trebui să administrăm buffer-ele.
> De exemplu bufferul de citire care este de mărime BUFFER_SIZE. Din
> bufferul acela, sunt ocupați device.read_size, să zicem...
> 1) Dacă eu primesc un apel read (cat /dev/uart), trimit în user space
> cât am eu în buffer și după cer de la hardware să umblu iar bufferul
> și la urmatorul read (cat) să trimit datele din noul buffer?

Daca primesti read din userspace trimiti cati octeti ai in buffer si
_atat_. Asta e explicatia pentru care un read din userspace trebuie pus
intotdeauna intr-o bucla daca vrei sa te asiguri ca s-au citit exact N
caractere. Daca nu exista niciun caracter in buffer, de-abia atunci
trebuie sa te blochezi, pentru ca read(2) specifica [virgula :)] ca, la un
apel fara eroare, se citeste cel putin un caracter din fisier.

> 2) Dacă primesc un apel read dar cu offset > device.read_size,
> presupun că mă blochez și să aștept până mai citesc ceva de la device?
> Sau trimit ce am în buffer și spun că am trimis doar read_size și după
> umplu iar bufferul din hardware?

Eu nu m-am uitat deloc la offset -- e vorba de un char device, si astea nu
ofera suport pentru random access[1]. Tot ce trebuie sa faci este sa
actualizezi *offset corespunzator, nu sa il iei in considerare. Cred (tm).

[1] http://en.wikipedia.org/wiki/Device_file#Character_devices

Hope this helps,
Vlad



More information about the pso mailing list