为什么我的命名管道不断被修改?

为什么我的命名管道不断被修改?

我有一个由 C 程序创建的命名 fifo,如下所示:

res = mkfifo("/home/myfolder/myfifo", 0666);

之后就只有读和写了。

现在,从这个答案:命名管道是否会更改文件系统我的结论是,系统实际上永远不应该写入文件系统上的实际文件,并且所有内容都在 RAM 中处理。

每当我重新启动程序时,“mkfifo”行都会返回“文件已存在”错误,这是正常的。
令我困扰的是,当我“ls”文件时,“上次修改日期时间”有时确实会改变。如果系统从未真正写入文件,那么它不应该保持不变吗?

答案1

通过管道传递的数据不会写入文件系统或从文件系统读取。创建命名管道时,会分配一个索引节点,以便可以从创建它的目录链接到该索引节点;所以这是一种形式“修改文件系统”。

访问命名管道将更新 inode 的访问时间,写入命名管道将更新 inode 的修改时间,因此文件系统也以这种间接方式被修改。这并不意味着数据被写入文件系统;而是意味着数据被写入文件系统。这就是 Linux 处理命名管道写入的方式。

相关内容