La maggior parte delle chiamate di sistema sono disturbate dal caricamento delle librerie condivise all'avvio. Le cose interessanti accadono qui:
openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
getdents(3, /* 2 entries */, 32768) = 48
getdents(3, /* 0 entries */, 32768) = 0
close(3)
Il openat(2)
la chiamata di sistema viene utilizzata per aprire la directory corrente ("."
) relativo alla directory di lavoro corrente (il AT_FDCWD
bandiera). Il O_DIRECTORY
flag indica che vuole aprire la directory e leggere il contenuto della directory.
I dati effettivi della directory vengono letti utilizzando il getdents(2)
chiamata di sistema. In questo caso, l'ha chiamato due volte, poiché fino a quando non restituisce 0, non è sicuro se ci siano più dati o meno. Infine, il descrittore di file viene chiuso al termine.
Se dovessi scrivere il tuo programma, tuttavia, non li chiameresti direttamente -- invece useresti opendir(3)
, readdir(3)
e closedir(3)
per leggere una directory. Sono portatili (conformi a POSIX) e ti isolano dai dettagli delle chiamate di sistema sottostanti. Sono anche più facili da usare, IMO.