Joh*_*iss 5 unix linux macos posix file-descriptor
我正在寻找文件描述符的类型,而不会在内核中阻塞。我知道我可以使用,fstat(2)但fstat也会获得各种元数据信息(访问时间等),这些信息可能会阻塞任意时间(尤其是在联网文件系统上)。
编辑:我正在寻找一个系统调用来执行此操作,生成一个单独的进程是不可接受的,因为生成一个进程并读取其结果肯定不是即时的。
唯一一点我需要知道的信息是真的,如果该文件描述符是一个磁盘上的“文件”( ,S_IFREG,S_IFLNK),S_IFDIR或者没有。另外,如果我能说出它是套接字(S_IFSOCK),fifo(S_IFIFO)还是字符设备(S_IFCHR),也可以。
我非常确定任何内核都可以随时获得此信息,并且我很感兴趣是否可以在不阻塞的情况下将其显示到用户空间。
便携式解决方案(至少为macOS和Linux)将不胜感激。
谢谢!
Max*_*kin -1
在 Linux 上,您可以查看proc伪文件系统,/proc/<pid>/fd例如:
[max@supernova:/proc/7275/fd] $ ls -l /proc/7275/fd/
total 0
lr-x------ 1 max max 64 Oct 12 16:28 0 -> /dev/null
l-wx------ 1 max max 64 Oct 12 16:28 1 -> 'pipe:[69689]'
lrwx------ 1 max max 64 Oct 12 16:28 10 -> 'socket:[69698]'
l-wx------ 1 max max 64 Oct 12 16:28 100 -> '/home/max/.config/google-chrome/Default/Service Worker/Database/MANIFEST-000001'
lr-x------ 1 max max 64 Oct 12 16:28 101 -> '/home/max/.config/google-chrome/Default/Sync Data/LevelDB/001633.ldb'
l-wx------ 1 max max 64 Oct 12 16:28 102 -> '/home/max/.config/google-chrome/Default/Service Worker/Database/000024.log'
lr-x------ 1 max max 64 Oct 12 16:28 103 -> '/home/max/.config/google-chrome/Default/Service Worker/Database/000022.ldb'
lr-x------ 1 max max 64 Oct 12 16:28 104 -> /opt/google/chrome/nacl_irt_x86_64.nexe
lr-x------ 1 max max 64 Oct 12 16:28 105 -> '/home/max/.config/google-chrome/Default/Service Worker/Database/000005.ldb'
lr-x------ 1 max max 64 Oct 12 16:28 106 -> '/home/max/.config/google-chrome/Default/Service Worker/Database/000025.ldb'
lr-x------ 1 max max 64 Oct 12 16:28 107 -> '/home/max/.config/google-chrome/Default/Service Worker/Database/000019.ldb'
lrwx------ 1 max max 64 Oct 12 16:28 108 -> 'socket:[89401]'
lrwx------ 1 max max 64 Oct 12 16:28 109 -> 'socket:[68628]'
lrwx------ 1 max max 64 Oct 12 16:28 11 -> 'anon_inode:[eventfd]'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |