C - 获取打开的处理程序列表 - 重复条目
C - get list of opened handlers - duplicate entries
我有这段代码可以检索打开的处理程序列表(主要是文件)
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
和 运行 时,它会多次打印同一个文件(从 n
到 FD_SETSIZE
,其中 n
是一些偏移量 ID...第一个 0 .. n
是一些系统处理程序,如 dev/nul 等)。
您在 fcntl(fd, F_GETFD, 0)
之后的错误检查有点可疑。假设你的意图是在你遇到第一个错误 fd
后退出,那么支票应该是 errno == EBADF
.
此外,我建议在 printf
之前检查您的第二个 fcntl
的结果
我有这段代码可以检索打开的处理程序列表(主要是文件)
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
和 运行 时,它会多次打印同一个文件(从 n
到 FD_SETSIZE
,其中 n
是一些偏移量 ID...第一个 0 .. n
是一些系统处理程序,如 dev/nul 等)。
您在 fcntl(fd, F_GETFD, 0)
之后的错误检查有点可疑。假设你的意图是在你遇到第一个错误 fd
后退出,那么支票应该是 errno == EBADF
.
此外,我建议在 printf
fcntl
的结果