zjisteni poctu souboru/adresaru

Robert Vojta robert na v0jta.net
Středa Říjen 31 22:48:27 CET 2001


> Delam program, ktery musi zjistovat, kolik je souboru/adresaru v urcitem
> adresari. V shellu bych to cislo dostal ls -l | wc -l, ale ja to potrebuju
> udelat v Cecku. 

  A jestli to potřebujete přesně, tak ještě grepnout pryč věci jako 'celkem',
... a když to chcete i rekurzivně, tak musíte k 'ls -l' dát 'ls -lR' a
vygrepovat pryč prázdné řádny, adresáře a celkem.

> Je sice jednoduche projet vsechno opendir/readdir, ale to je trochu pomale
> a vycerpavajici. Nejde to udelat nejak rychleji/efektivneji?

  Myslíte si, že kombinace 'ls -l | wc -l' je rychlejší než něco jako ...

  int cnt = 0;
  DIR *d;

  d = opendir("adresar");
  while (readdir(d)) cnt++;
  closedir(d);

  ... o tom silně pochybuju a jaksi nevím co je na tom vyčerpávajícího.
BTW v dalším příspěvku byl zmiňován 'scandir', který opravdu vrátí počet
položek v adresáři, ale mezi tím pro každou položku, resp. strukturu dirent
provede malloc() a vy na konci ještě musíte provést u všech těchto položek
free(), pak ještě tyto položky na přání třídí, ... -> tak to se taky nehodí.
  Jenže záleží co přesně chcete vypočítat, takže se vám asi ta režie trochu
zvedne, protože u každé položky budete muset provést stat() aby jste zjistil
o co jde (adresář, soubor, link, ...) a podle toho se zachovat, tj. započítat,
nezapočítat, rekurzivně protraverzovat i adresáře, atd.

                                                                --Robert V0jta

-- 

  Never test for an error condition you don't know how to handle.  --Steinbach

------------- další část ---------------
A non-text attachment was scrubbed...
Name: [žádný popis není k dispozici]
Type: application/pgp-signature
Size: 240 bytes
Desc: [žádný popis není k dispozici]
URL: <http://www.linux.cz/pipermail/linux/attachments/20011031/8433b4fe/attachment.sig>


Další informace o konferenci Linux