]>
Commit | Line | Data |
---|---|---|
32c21c76 | 1 | /* |
faeb1b64 KZ |
2 | * No copyright is claimed. This code is in the public domain; do with |
3 | * it what you wish. | |
4 | * | |
32c21c76 KZ |
5 | * Copyright (C) 2021 Karel Zak <kzak@redhat.com> |
6 | */ | |
7 | #ifndef UTIL_LINUX_PROCFS_H | |
8 | #define UTIL_LINUX_PROCFS_H | |
9 | ||
10 | ||
11 | #include <stdio.h> | |
12 | #include <stdlib.h> | |
13 | #include <unistd.h> | |
14 | #include <stdint.h> | |
15 | #include <sys/types.h> | |
16 | #include <sys/stat.h> | |
17 | #include <string.h> | |
18 | #include <inttypes.h> | |
19 | #include <dirent.h> | |
20 | ||
21 | #include "path.h" | |
22 | ||
23 | struct procfs_process { | |
24 | pid_t pid; | |
25 | }; | |
26 | ||
27 | extern void ul_procfs_init_debug(void); | |
28 | extern struct path_cxt *ul_new_procfs_path(pid_t pid, const char *prefix); | |
29 | extern int procfs_process_init_path(struct path_cxt *pc, pid_t pid); | |
30 | ||
31 | extern int procfs_process_get_uid(struct path_cxt *pc, uid_t *uid); | |
32 | extern ssize_t procfs_process_get_cmdline(struct path_cxt *pc, char *buf, size_t bufsz); | |
33 | extern ssize_t procfs_process_get_cmdname(struct path_cxt *pc, char *buf, size_t bufsz); | |
f26ddd08 | 34 | extern ssize_t procfs_process_get_stat(struct path_cxt *pc, char *buf, size_t bufsz); |
32c21c76 | 35 | |
c2ece66e | 36 | extern int procfs_process_get_stat_nth(struct path_cxt *pc, int n, uintmax_t *re); |
32c21c76 KZ |
37 | |
38 | static inline ssize_t procfs_process_get_exe(struct path_cxt *pc, char *buf, size_t bufsz) | |
39 | { | |
40 | return ul_path_readlink(pc, buf, bufsz, "exe"); | |
41 | } | |
42 | ||
43 | static inline ssize_t procfs_process_get_root(struct path_cxt *pc, char *buf, size_t bufsz) | |
44 | { | |
45 | return ul_path_readlink(pc, buf, bufsz, "root"); | |
46 | } | |
47 | ||
48 | static inline ssize_t procfs_process_get_cwd(struct path_cxt *pc, char *buf, size_t bufsz) | |
49 | { | |
50 | return ul_path_readlink(pc, buf, bufsz, "cwd"); | |
51 | } | |
52 | ||
53 | extern int procfs_process_next_tid(struct path_cxt *pc, DIR **sub, pid_t *tid); | |
54 | extern int procfs_process_next_fd(struct path_cxt *pc, DIR **sub, int *fd); | |
55 | ||
56 | extern int procfs_dirent_is_process(struct dirent *d); | |
57 | extern int procfs_dirent_get_pid(struct dirent *d, pid_t *pid); | |
58 | extern int procfs_dirent_get_uid(DIR *procfs, struct dirent *d, uid_t *uid); | |
59 | extern int procfs_dirent_match_uid(DIR *procfs, struct dirent *d, uid_t uid); | |
60 | extern int procfs_dirent_get_name(DIR *procfs, struct dirent *d, char *buf, size_t bufsz); | |
61 | extern int procfs_dirent_match_name(DIR *procfs, struct dirent *d, const char *name); | |
62 | ||
63 | extern int fd_is_procfs(int fd); | |
64 | extern char *pid_get_cmdname(pid_t pid); | |
65 | extern char *pid_get_cmdline(pid_t pid); | |
66 | ||
67 | #endif /* UTIL_LINUX_PROCFS_H */ |