Většina systémových volání je hlučná z načítání sdílených knihoven při spuštění. Zajímavé věci se dějí zde:
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)
openat(2)
systémové volání se používá k otevření aktuálního adresáře ("."
) vzhledem k aktuálnímu pracovnímu adresáři (AT_FDCWD
vlajka). O_DIRECTORY
flag označuje, že chce otevřít adresář a přečíst obsah adresáře.
Skutečná data adresáře se čtou pomocí getdents(2)
systémové volání. V tomto případě to zavolalo dvakrát, protože dokud nevrátí 0, není jisté, zda existuje více dat nebo ne. Nakonec se po dokončení zavře deskriptor souboru.
Pokud byste však měli napsat svůj vlastní program, nevolali byste je přímo – místo toho byste použili opendir(3)
, readdir(3)
a closedir(3)
pro čtení adresáře. Jsou přenosné (vyhovující POSIX) a izolují vás od detailů základních systémových volání. Také se snáze používají, IMO.