readdir(2) System Calls Manual readdir(2)

readdir - odczytuje wpis w katalogu

Standardowa biblioteka C (libc, -lc)

#include <sys/syscall.h>           /* Definicja stałych SYS_* */
#include <unistd.h>
int syscall(SYS_readdir, unsigned int fd,
            struct old_linux_dirent *dirp, unsigned int count);

Uwaga: Brak definicji struct old_linux_dirent; zob. UWAGI.

Nie jest to funkcja, która cię interesuje. Opis implementacji interfejsu zgodnego z POSIX w bibliotece C znajduje się w readdir(3). Niniejsza strona opisuje goły interfejs wywołania systemowego, który został zastąpiony przez getdents(2).

readdir() odczytuje jedną strukturę old_linux_dirent z katalogu, na który wskazuje deskryptor pliku fd, do bufora, na który wskazuje dirp. Argument count jest ignorowany; odczytywana jest co najwyżej jedna struktura old_linux_dirent.

Struktura old_linux_dirent jest zadeklarowana (prywatnie, w pliku jądra Linux fs/readdir.c) następująco:


struct old_linux_dirent {
    unsigned long d_ino;     /* numer i-węzła */
    unsigned long d_offset;  /* offset do tego old_linux_dirent */
    unsigned short d_namlen; /* długość tego d_name */
    char  d_name[1];         /* nazwa pliku (zakończona znakiem NUL) */
}

d_ino jest numerem i-węzła. d_off jest odległością od początku katalogu do tego wpisu old_linux_dirent. d_reclen jest rozmiarem d_name, nie licząc kończącego znaku NUL ('\0'). d_name jest zakończoną znakiem NUL nazwą pliku.

Po pomyślnym zakończeniu zwracane jest 1. Po natrafieniu na koniec katalogu zwracane jest 0. Po błędzie zwracane jest -1 i ustawiane errno wskazując błąd.

Nieprawidłowy deskryptor fd.
Argument wskazuje poza przestrzeń adresową wywołującego procesu.
Bufor na wynik jest za mały.
Nie ma takiego katalogu.
Deskryptor pliku nie odnosi się do katalogu.

Konieczne jest samodzielne zdefiniowanie struktury old_linux_dirent. Powinno się jednak raczej korzystać z readdir(3).

To wywołanie systemowe nie istnieje na x86-64.

Linux.

getdents(2), readdir(3)

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys <pborys@dione.ids.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

2 maja 2024 r. Linux man-pages 6.8