-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Closed
Labels
Description
Description
A known way to get the file descriptor count on macOS is by using /dev/fd
. Here is an example implementation in Rust.
The problem is that some file descriptors listed under /dev/fd
are not stat
-able, so they will fail when queried. One example is kqueue
s.
Reproduction Steps
Directory.EnumerateFileSystemEntries("/dev/fd").Count();
on macOS.
Expected behavior
The number of open file descriptors.
Actual behavior
C# > Directory.EnumerateFileSystemEntries("/dev/fd").Count();
╭─❌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ System.UnauthorizedAccessException: Access to the path '/dev/fd/5' is denied. │
│ ---> System.IO.IOException: Bad file descriptor │
│ --- End of inner exception stack trace --- │
│ at System.IO.FileStatus.ThrowOnCacheInitializationError(ReadOnlySpan`1 path) │
│ at System.IO.Enumeration.FileSystemEntry.get_IsSymbolicLink() │
│ at System.IO.Enumeration.FileSystemEntry.Initialize(FileSystemEntry& entry, DirectoryEntry directoryEntry, ReadOnlySpan`1 │
│ directory, ReadOnlySpan`1 rootDirectory, ReadOnlySpan`1 originalRootDirectory, Span`1 pathBuffer) │
│ at System.IO.Enumeration.FileSystemEnumerator`1.MoveNext() │
│ at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source) │
│ at Submission#3.<<Initialize>>d__0.MoveNext() │
│ --- End of stack trace from previous location --- │
│ at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 │
│ currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken) │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Regression?
Not sure if it's a regression.
Known Workarounds
Manually PInvoke opendir
and then iterate with readdir
.
Configuration
dotnet 6.0.101, macOS 10.14+, x64 and arm64
Other information
No response