SockFS 通过文件系统挂载/与 UDP 和 TCP 套接字交互

SockFS 通过文件系统挂载/与 UDP 和 TCP 套接字交互

我正在读关于套接字文件系统,我想知道为什么似乎没有安装驱动程序。也就是说,如果 SockFS 为 UDP 和 TCP 套接字实现了 VFS API,为什么没有套接字的用户空间文件系统表示,以便我可以cat /net/tcp/151.101.65.69/80echo "GET /v1/users/some-id HTTP/1.1" > /net/tcp/192.168.0.5/8000做其他事情?

事实上,由于 Unix 套接字实现了与 TCP 和 UDP 套接字相同的套接字 API,并且还具有文件系统表示形式,因此这就更没有意义了。

编辑:发现有关/proc/*/fd/*套接字文件/符号链接的信息/proc/pid/fd 中的 [socket:number] 是什么意思,尽管它们看起来不是很有用,因为您无法从它们读取或写入。

root@drpyser-thinkpad[192.168.8.224] in /proc/1
❯ ll fd/18
lrwx------ root root 64 B Fri Feb 24 13:54:16 2023  fd/18 ⇒ socket:[14810]

root@drpyser-thinkpad[192.168.8.224] in /proc/1
❯ file fd/18
fd/18: symbolic link to socket:[14810]

root@drpyser-thinkpad[192.168.8.224] in /proc/1
❯ socket:[14810]^C

root@drpyser-thinkpad[192.168.8.224] in /proc/1
❯ cat fd/18
cat: fd/18: No such device or address

root@drpyser-thinkpad[192.168.8.224] in /proc/1
✖1 ❯ cat > fd/18
warning: An error occurred while redirecting file 'fd/18'
open: No such device or address

EDIT2:除了计划 9,我还发现了 FreeBSD 概念的实现:http://csr.bu.edu/icnp2005/posters/netfs_abstract.pdf

答案1

为什么没有套接字的用户空间文件系统表示,以便我可以cat /net/tcp/151.101.65.69/80echo "GET /v1/users/some-id HTTP/1.1" > /net/tcp/192.168.0.5/8000/或其他东西?

两种不同的东西。 SockFS 表示以某种与文件描述符一致的方式创建的套接字。

您想要的是一个执行完全不同操作的用户层文件系统!它隐藏了复杂的操作,例如创建新套接字、建立与远程主机的连接以及开始在文件名后面发送和接受数据。与使用一个结构来表示已经在 VFS 兼容的东西中建立的套接字描述符完全不同!

顺便说一句,我听说 Plan9 操作系统恰好具有您想要的文件系统层次结构。

所以,可能有人已经写了你想要的东西;而我们俩都不知道这一点。事实上,我认为 zsh 会模拟当它看到您将某些内容重定向到特定字符串而不是实际文件名时:建立到指定主机/端口的 TCP 连接并将重定向的字符发送到那里。

无论如何,这实际上并不是一个文件系统。如果您想编写一个,请继续:FUSE 并不那么难,尽管性能肯定受到限制,但没有任何明显的因素会阻止您实现您所描述的内容。它不过有点令人困惑!多个进程可以同时打开/net/tcp/192.168.0.5/8000,您是否希望这是相同的连接,还是两个单独的连接?您在该文件系统上执行的操作需要小心一些!

相关内容