[pso] [Tema4][lin] readdir

Vlad Dogaru ddvlad at rosedu.org
Thu Apr 28 13:48:32 EEST 2011


On Thu, Apr 28, 2011 at 12:55:22PM +0300, Claudiu Mihail wrote:
> Salut,
> 
> Am cateva nelamuriri legate de operatia readdir. Voi expune intai contextul.
> In laboratorul 10 functia readdir itereaza prin blocul de date incepand de
> la filp->f_pos pana la numarul de dir_entry-uri maxime. Iar la final
> actualizam filp->f_pos = i; . Momentan eu fac functia de readdir luand
> fiecare bloc de date din inode-ul corespunzator ( struct inode *inode =
> filp->f_path.dentry->d_inode; ) si facand for (i = filp->f_pos; i <
> num_entries_per_block; i++). Intrebarea este cu cine actualizez f_pos la
> final? Abordarea mea nu mi se pare foarte corecta desi trece toate testele
> de readdir mai putin unul singur. As aprecia foarte tare un guideline in
> legatura cu modul in care trebuie abordata implementarea a readdir
> (conceptual evident).

La fel cum read poate citi doar o parte din conținutul fișierului și
actualizează offsetul structurii file, readdir (sau, mai nou, getdents)
poate cere doar un număr de dentry-uri mai mic decât cel existent în
director.  Pentru a ști de unde să reiei apeluri succesive de readdir,
folosește file->f_pos.

În funcția ta readdir trebuie să întorci dentry-uri începând cu
file->f_pos, apoi să actualizezi file->f_pos corespunzător.

Vlad


More information about the pso mailing list