gpt4 book ai didi

linux - 是否有独立于平台的非阻塞方式来判断文件描述符是否是磁盘文件(常规/目录)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:31 26 4
gpt4 key购买 nike

我正在寻找不会在内核中阻塞的文件描述符类型。我知道我可以使用 fstat(2)fstat 还会给我各种元数据信息(访问时间等),这些信息可能会阻塞任意时间(特别是在网络文件系统上)。

编辑:我正在寻找一个系统调用来执行此操作,生成一个单独的进程是 Not Acceptable ,因为生成一个进程并读取其结果肯定不是即时的。

我唯一需要知道的信息是文件描述符是否是磁盘上的"file"(S_IFREGS_IFLNKS_IFDIR) 或不。或者,如果我能判断它是套接字 (S_IFSOCK)、fifo (S_IFIFO) 还是字符设备 (S_IFCHR)也很好。

我很确定任何内核都可以轻松获得这些信息,我很感兴趣是否可以在不阻塞的情况下将其呈现给用户空间。

非常感谢可移植解决方案(至少是 macOS 和 Linux)。

谢谢!

最佳答案

在 Linux 上,您可以查看 proc pseudo-filesystem , /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]'

关于linux - 是否有独立于平台的非阻塞方式来判断文件描述符是否是磁盘文件(常规/目录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com