La mayoría de las llamadas al sistema tienen ruido debido a la carga de bibliotecas compartidas al inicio. Las cosas interesantes suceden aquí:
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)
El openat(2)
La llamada al sistema se utiliza para abrir el directorio actual ("."
) relativo al directorio de trabajo actual (el AT_FDCWD
bandera). El O_DIRECTORY
bandera indica que quiere abrir el directorio y leer el contenido del directorio.
Los datos reales del directorio se leen usando el getdents(2)
llamada del sistema. En este caso lo llamó dos veces, ya que hasta que no devuelve 0 no se sabe si hay más datos o no. Finalmente, el descriptor de archivo se cierra después de que se hace.
Sin embargo, si tuviera que escribir su propio programa, no los llamaría directamente; en su lugar, usaría opendir(3)
, readdir(3)
y closedir(3)
para leer un directorio. Son portátiles (compatibles con POSIX) y lo aíslan de los detalles de las llamadas al sistema subyacentes. También son más fáciles de usar, en mi opinión.