示例#1
0
int
getdtablecount(void) {
	struct procstat *procstat;
	struct kinfo_proc *kipp;
	struct filestat_list *head;
	struct filestat *fst;
	unsigned int fd_count = 0;
	pid_t pid;
	unsigned int cnt;

	procstat = procstat_open_sysctl();
	if (procstat == NULL)
		return 0;

	pid = getpid();
	
	kipp = procstat_getprocs(procstat, KERN_PROC_PID, pid, &cnt);
	if (kipp == NULL)
		return 0;

	if (cnt != 0) {
		head = procstat_getfiles(procstat, kipp, 0);
		if (head == NULL)
			return 0;
		fst = STAILQ_LAST(head, filestat, next);
		fd_count = fst->fs_fd;
	}
	procstat_freeprocs(procstat, kipp);
	return fd_count;
}
示例#2
0
文件: freebsd.c 项目: 40a/reptyr
struct filestat_list* get_procfiles(pid_t pid, struct kinfo_proc **kp, struct procstat **procstat, unsigned int *cnt) {
    int mflg = 0; // include mmapped files
    (*procstat) = procstat_open_sysctl();
    (*kp) = procstat_getprocs(*procstat, KERN_PROC_PID, pid, cnt);
    if ((*kp) == NULL || *cnt < 1)
        return NULL;

    return procstat_getfiles(*procstat, *kp, mflg);
}