有个需求如下: Linux 下进程 A (特权)是系统内唯一的管道读取方,如果有其它进程试图在同一个管道上试图读取,则报错退出。包括其它 root 进程都不应该能读取这个管道。
我现在测试了下如果我正常开管道的话,cat 还是能读取该管道。如果创建管道后删除管道文件并且调用 flock 加上独占锁(在读取进程里),去 /proc/pid/fd 下面依旧能使用 cat 对管道执行第二个读取操作……( cat 好像是用的 ioctl ?) 请问有没有办法把这两个地方都锁上或者不让读取?例如使用 ioctl 之类的(对这个真的不熟),或者这个设计本身有问题,需要换一种实现方式?
谢谢。
p.s.测试用到的代码如下: https://gist.github.com/mingl0280/c6d7e88bc3e0c8079498b20ab9afddf3
读取方: https://gist.github.com/mingl0280/c6d7e88bc3e0c8079498b20ab9afddf3#file-reader_side-cpp
写入方: https://gist.github.com/mingl0280/c6d7e88bc3e0c8079498b20ab9afddf3#file-writer_side-cpp
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.