C - 获取已打开的处理程序列表 - 重复条目

时间:2017-09-09 07:46:00

标签: c linux fopen

我有这段代码来检索已打开的处理程序列表(主要是文件)

int flags;
int fd;
char buf[MAXPATHLEN+1] ;
int n = 1 ;

for (fd = 0; fd < (int) FD_SETSIZE; fd++)
{
    errno = 0;
    flags = fcntl(fd, F_GETFD, 0);
    if (flags == -1 && errno)
    {
        if (errno != EBADF)
        {
            return;
         }
     }

     fcntl(fd , F_GETPATH, buf ) ;
     printf( "File Descriptor %d number %d in use for: %s",fd,n , buf ) ;
    ++n ;
}

但是,当我调用单fopen并运行此文件时,它会多次打印相同的文件(从nFD_SETSIZE,其中n是某个偏移ID。 .. first 0 .. n是一些系统处理程序,如dev / nul等。)。

1 个答案:

答案 0 :(得分:1)

fcntl(fd, F_GETFD, 0)之后的错误检查有点可疑。假设您在达到第一个错误fd后保留意图,则检查应为errno == EBADF

另外,我建议您在fcntl

之前检查第二个printf的结果