MCPcopy Index your code
hub / github.com/Xfennec/progress / get_fdinfo

Function get_fdinfo

progress.c:537–721  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

535
536
537signed char get_fdinfo(pid_t pid, int fdnum, fdinfo_t *fd_info)
538{
539struct stat stat_buf;
540#ifdef __linux__
541char fdpath[MAXPATHLEN + 1];
542char line[LINE_LEN];
543FILE *fp;
544int flags;
545#endif
546struct timezone tz;
547
548fd_info->num = fdnum;
549fd_info->mode = PM_NONE;
550
551#ifdef __APPLE__
552struct vnode_fdinfowithpath vnodeInfo;
553if (proc_pidfdinfo(pid, fdnum, PROC_PIDFDVNODEPATHINFO, &vnodeInfo, PROC_PIDFDVNODEPATHINFO_SIZE) <= 0)
554 return 0;
555strncpy(fd_info->name, vnodeInfo.pvip.vip_path, MAXPATHLEN);
556#endif // __APPLE__
557#ifdef __linux__
558ssize_t len;
559snprintf(fdpath, MAXPATHLEN, "%s/%d/fd/%d", PROC_PATH, pid, fdnum);
560
561len=readlink(fdpath, fd_info->name, MAXPATHLEN);
562if (len != -1)
563 fd_info->name[len] = 0;
564else {
565 //~ nperror("readlink");
566 return 0;
567}
568#endif
569#ifdef __FreeBSD__
570struct procstat *procstat;
571struct kinfo_proc *procs;
572unsigned int proc_count;
573
574struct kinfo_proc *proc;
575struct filestat *fstat;
576struct filestat_list *fstat_list;
577
578int i;
579
580procstat = procstat_open_sysctl();
581assert(procstat != NULL);
582
583procs = procstat_getprocs(procstat, KERN_PROC_PID, pid, &proc_count);
584if (procs == NULL)
585 goto done;
586
587for (i = 0; i < proc_count; i++) {
588 proc = &procs[i];
589
590 fstat_list = procstat_getfiles(procstat, proc, 0);
591 if (fstat_list == NULL)
592 continue;
593
594 gettimeofday(&fd_info->tv, &tz);

Callers 1

monitor_processesFunction · 0.85

Calls 2

statClass · 0.85
nperrorFunction · 0.85

Tested by

no test coverage detected