Portál AbcLinuxu, 26. dubna 2024 17:22


Dotaz: Linux kernel - struktura struct file_operations - read

29.4.2015 19:12 Rada | skóre: 14
Linux kernel - struktura struct file_operations - read
Přečteno: 178×
Odpovědět | Admin
Přeji pohodový den, chtěl bych se zeptat, jestli někdo řešil čtecí callback ve struktuře file_operations na straně jádra. Callback má tento tvar:

ssize_t read_proc(struct file *filp, char *buf,size_t count,loff_t *offp )

buf je cílový buffer, kam se zapisují data pro uživatele, count je velikost bufferu na straně uživatele - kolik mu můžu maximálně zapsat. Není mi ale jasný význam položky lossf_t *offp. Netušíte někdo, co tato položka znamená a jak ji použít? Také bych se rád zeptal, jak rozliším situaci, kdy uživatel přečetl část dat ze souboru a teď chce zbytek od situace, kdy někdo další začal číst. Nějakou dobu jsem googlil, ale odpověď jsem nenašel. Děkuji za jakoukoliv radu:-)

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Rada (tazatel))
29.4.2015 19:58 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Linux kernel - struktura struct file_operations - read
Odpovědět | | Sbalit | Link | Blokovat | Admin
K tomu slouží právě ten offset, offp ukazuje na offset, ze kterého máte číst. Pointer je to proto, že se callback by měl offset aktualizovat podle toho, kolik toho přečetl (a vrací).
29.4.2015 20:08 Rada | skóre: 14
Rozbalit Rozbalit vše Re: Linux kernel - struktura struct file_operations - read
Děkuji, funguje to krásně:-)
29.4.2015 20:08 Radek Isa | skóre: 14
Rozbalit Rozbalit vše Re: Linux kernel - struktura struct file_operations - read
Odpovědět | | Sbalit | Link | Blokovat | Admin
napriklad to muzes udelat takto.
char test[] = "ahoj data";

ssize_t read_proc(struct file *filp, char *buf,size_t count,loff_t *offp ){
//+nejaka ochrana
copy_to_user(buf, test + *offp, count);
*offp += count;

retunr count;
}

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.