gpt4 book ai didi

linux - 在创建管道、fifo 或套接字时创建 inode

转载 作者:IT王子 更新时间:2023-10-29 01:06:25 24 4
gpt4 key购买 nike

我有关于 Linux 的一般性问题。如果我创建一个fifo,inode会被创建吗?管道? socket ?

最佳答案

在 Linux 上,可以从 /proc/<PID>/fd 获得答案。目录。引用/proc文档(man 5 proc):

For file descriptors for pipes and sockets, the entries will be symbolic links whose content is the file type with the inode. A readlink(2) call on this file returns a string in the format:

    type:[inode]

For example, socket:[2248868] will be a socket and its inode is 2248868. For sockets, that inode can be used to find more information in one of the files under /proc/net/.

让我们验证一下:

$ bash -c 'true | ls -l /proc/self/fd/0'
lr-x------ 1 user user 64 Sep 13 03:58 /proc/self/fd/0 -> 'pipe:[54741]'

那么管道和套接字会有 inode 吗?是的 ! FIFO 呢?我们可以猜测,因为它们有文件名,所以它们确实有 inode(我认为没有 inode 的 directory entries 不可能存在)。但是让我们验证一下:

$ mkfifo foobar.fifo
$ ls -i foobar.fifo
1093642 foobar.fifo

答案是“是的,FIFO 也有 inode”。

然而,这提出了一个重要的问题:inode 是文件系统的属性,inodes aren't unique accross filesystems ,那么当我们看到管道 inode 时,正在引用哪个文件系统?好吧,原来存在 pipefs virtual filesystem它挂载在内核空间,而不是用户空间。它同时管理管道和 FIFO,因此您看到的 inode 编号是 /proc example 是那些文件系统的属性,而不是磁盘上的文件系统。是的,匿名管道和匿名套接字不会在磁盘文件系统上有 inode,因为磁盘上没有文件名和字节(尽管可能有数据缓存,实际上旧的 Unixes 缓存管道到磁盘)。然而,FIFO 和 Unix 域套接字在文件系统上有文件名,因此在 foobar.fifo 中inode 属于磁盘文件系统的示例。

另见:

关于linux - 在创建管道、fifo 或套接字时创建 inode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519688/

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