17db96d56Sopenharmony_ci"""When called as a script, print a comma-separated list of the open
27db96d56Sopenharmony_cifile descriptors on stdout.
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ciUsage:
57db96d56Sopenharmony_cifd_stats.py: check all file descriptors
67db96d56Sopenharmony_cifd_status.py fd1 fd2 ...: check only specified file descriptors
77db96d56Sopenharmony_ci"""
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciimport errno
107db96d56Sopenharmony_ciimport os
117db96d56Sopenharmony_ciimport stat
127db96d56Sopenharmony_ciimport sys
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciif __name__ == "__main__":
157db96d56Sopenharmony_ci    fds = []
167db96d56Sopenharmony_ci    if len(sys.argv) == 1:
177db96d56Sopenharmony_ci        try:
187db96d56Sopenharmony_ci            _MAXFD = os.sysconf("SC_OPEN_MAX")
197db96d56Sopenharmony_ci        except:
207db96d56Sopenharmony_ci            _MAXFD = 256
217db96d56Sopenharmony_ci        test_fds = range(0, _MAXFD)
227db96d56Sopenharmony_ci    else:
237db96d56Sopenharmony_ci        test_fds = map(int, sys.argv[1:])
247db96d56Sopenharmony_ci    for fd in test_fds:
257db96d56Sopenharmony_ci        try:
267db96d56Sopenharmony_ci            st = os.fstat(fd)
277db96d56Sopenharmony_ci        except OSError as e:
287db96d56Sopenharmony_ci            if e.errno == errno.EBADF:
297db96d56Sopenharmony_ci                continue
307db96d56Sopenharmony_ci            raise
317db96d56Sopenharmony_ci        # Ignore Solaris door files
327db96d56Sopenharmony_ci        if not stat.S_ISDOOR(st.st_mode):
337db96d56Sopenharmony_ci            fds.append(fd)
347db96d56Sopenharmony_ci    print(','.join(map(str, fds)))
35