我有一个从 C 程序创建的命名 fifo,如下所示:
res = mkfifo("/home/myfolder/myfifo", 0666);
Run Code Online (Sandbox Code Playgroud)
之后只有读取和写入。
现在,从这个答案:命名管道是否会更改文件系统我得出的结论是,系统实际上永远不应该实际写入文件系统上的实际文件,并且所有内容都在 RAM 中处理。
每当我重新启动程序时,“mkfifo”行都会返回“文件已存在”错误,这没有问题。
困扰我的是,当我“ls”文件时,“上次修改日期时间”有时会改变。如果系统从未真正写入文件,它不应该保持不变吗?
通过管道的数据不会写入文件系统或从文件系统读取。创建命名管道时,会分配一个 inode,以便可以从创建它的目录链接到它;所以这是一种“修改文件系统”的形式。
访问命名管道将更新 inode 的访问时间,写入命名管道将更新 inode 的修改时间,因此文件系统也以这种间接方式被修改。这并不意味着数据被写入文件系统;这就是 Linux 处理对命名管道的写入的方式。