/dev/net/tun 是如何工作的?我会取回我写的东西吗?

How does /dev/net/tun works? Do I get back what I write?

假设我想通过 tun 设备发送和接收数据。

我在打开 /dev/net/tun 的地方找到了答案 ,就好像它是一个文件并从中读取一样。但是,如果我想向它发送数据包怎么办?如果我只是 write 它,那么当我从它 read 时我会取回数据包,或者我可能会很幸运并在数据包发送后读取。

它是如何工作的? /dev/net/tun 是否会消耗我写的东西,而不是在我阅读时还给它?它知道发送和接收的内容吗?我想象它像一个文件一样工作,所以无论我写什么,我都会在阅读时返回。

How it works? Does /dev/net/tun consumes what I write and not give it back when I read?

确实如此。 你永远无法取回所写的内容。

I imagine it works like a file so whatever I write I get back when I read.

不,它像设备节点一样工作。 写入的内容进入设备 (在这种情况下 - 虚拟设备)。 读取的内容是从(虚拟) 设备。 想想/dev/tty:你不看什么 写在那里。相反,你读了什么 是在键盘上输入的,而什么是 屏幕上可以看到写的。