tools/lib/api/io_dir.h
Source file repositories/reference/linux-study-clean/tools/lib/api/io_dir.h
File Facts
- System
- Linux kernel
- Corpus path
tools/lib/api/io_dir.h- Extension
.h- Size
- 2554 bytes
- Lines
- 106
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
dirent.hfcntl.hstdlib.hunistd.hsys/stat.hsys/syscall.hlinux/limits.h
Detected Declarations
struct io_dirent64struct io_dirfunction perf_getdents64function io_dir__initfunction io_dir__rewinddirfunction io_dir__is_dir
Annotated Snippet
struct io_dirent64 {
ino64_t d_ino; /* 64-bit inode number */
off64_t d_off; /* 64-bit offset to next structure */
unsigned short d_reclen; /* Size of this dirent */
unsigned char d_type; /* File type */
char d_name[NAME_MAX + 1]; /* Filename (null-terminated) */
};
struct io_dir {
int dirfd;
ssize_t available_bytes;
struct io_dirent64 *next;
struct io_dirent64 buff[4];
};
static inline void io_dir__init(struct io_dir *iod, int dirfd)
{
iod->dirfd = dirfd;
iod->available_bytes = 0;
}
static inline void io_dir__rewinddir(struct io_dir *iod)
{
lseek(iod->dirfd, 0, SEEK_SET);
iod->available_bytes = 0;
}
static inline struct io_dirent64 *io_dir__readdir(struct io_dir *iod)
{
struct io_dirent64 *entry;
if (iod->available_bytes <= 0) {
ssize_t rc = perf_getdents64(iod->dirfd, iod->buff, sizeof(iod->buff));
if (rc <= 0)
return NULL;
iod->available_bytes = rc;
iod->next = iod->buff;
}
entry = iod->next;
iod->next = (struct io_dirent64 *)((char *)entry + entry->d_reclen);
iod->available_bytes -= entry->d_reclen;
return entry;
}
static inline bool io_dir__is_dir(const struct io_dir *iod, struct io_dirent64 *dent)
{
if (dent->d_type == DT_UNKNOWN) {
struct stat st;
if (fstatat(iod->dirfd, dent->d_name, &st, /*flags=*/0))
return false;
if (S_ISDIR(st.st_mode)) {
dent->d_type = DT_DIR;
return true;
}
}
return dent->d_type == DT_DIR;
}
#endif /* __API_IO_DIR__ */
Annotation
- Immediate include surface: `dirent.h`, `fcntl.h`, `stdlib.h`, `unistd.h`, `sys/stat.h`, `sys/syscall.h`, `linux/limits.h`.
- Detected declarations: `struct io_dirent64`, `struct io_dir`, `function perf_getdents64`, `function io_dir__init`, `function io_dir__rewinddir`, `function io_dir__is_dir`.
- Atlas domain: Support Tooling And Documentation / tools.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.