[pso] [Tema2][Linux]Buffers
Alexandru Juncu
alexandrujuncu at gmail.com
Wed Apr 21 00:24:08 EEST 2010
2010/4/20 Vlad Dogaru <ddvlad at rosedu.org>:
> 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
thank you, pare mai clar acum :)
More information about the pso
mailing list