lib/procutils: add proc_is_procfs helper.

Also add missing include in procutils.h for the definition of pid_t.
This commit is contained in:
Érico Rolim 2020-11-18 14:07:10 -03:00
parent d4cb6a0335
commit e411b8a63d
2 changed files with 22 additions and 0 deletions

View File

@ -2,6 +2,7 @@
#define UTIL_LINUX_PROCUTILS
#include <dirent.h>
#include <sys/types.h>
struct proc_tasks {
DIR *dir;
@ -31,4 +32,6 @@ extern int proc_next_pid(struct proc_processes *ps, pid_t *pid);
extern char *proc_get_command(pid_t pid);
extern char *proc_get_command_name(pid_t pid);
extern int proc_is_procfs(int fd);
#endif /* UTIL_LINUX_PROCUTILS */

View File

@ -13,11 +13,13 @@
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/vfs.h>
#include <sys/types.h>
#include <dirent.h>
#include <ctype.h>
#include "procutils.h"
#include "statfs_magic.h"
#include "fileutils.h"
#include "all-io.h"
#include "c.h"
@ -235,6 +237,23 @@ int proc_next_pid(struct proc_processes *ps, pid_t *pid)
return 0;
}
/* checks if fd is file in a procfs;
* returns 1 if true, 0 if false or couldn't determine */
int proc_is_procfs(int fd)
{
struct statfs st;
int ret;
do {
ret = fstatfs(fd, &st);
} while (ret == -1 && errno == EINTR);
if (ret == 0)
return st.f_type == STATFS_PROC_MAGIC;
else
return 0;
}
#ifdef TEST_PROGRAM_PROCUTILS
static int test_tasks(int argc, char *argv[])