我想创建一个文件,它的描述符具有一些可自定义的行为。特别地,我想创建一个文件描述符,当写入时,会在每行前缀上进程名称和pid(也许还有时间),但我可以想象它还可以用于其他事情。
我不想改变写入程序 - 首先,我希望它能适用于系统上的所有程序,甚至是shell/perl等脚本,而且如果不改变所有源代码,这将是不切实际甚至是不可能的。
请注意,在这种情况下,管道是不适用的,因为当写入进程fork()时,新创建的子进程共享fd,并且通过管道的读取端无法与其父进程区分开来。
虽然有一些方法可以解决这个问题,但我认为它们相当笨拙:
我希望找到一种不涉及内核更改的解决方案,但如果必要,我也可以接受它们。
只是一个想法:FUSE是否是一个答案?
我不想改变写入程序 - 首先,我希望它能适用于系统上的所有程序,甚至是shell/perl等脚本,而且如果不改变所有源代码,这将是不切实际甚至是不可能的。
请注意,在这种情况下,管道是不适用的,因为当写入进程fork()时,新创建的子进程共享fd,并且通过管道的读取端无法与其父进程区分开来。
虽然有一些方法可以解决这个问题,但我认为它们相当笨拙:
- 创建一个内核模块来创建这样的fds。例如,您可以打开一些/dev/customfd,然后指示模块执行一些转换等或将数据发送到用户空间或套接字等。
- 使用LD_PRELOAD覆盖fd操作函数并对“特殊”fd执行此类操作。
我希望找到一种不涉及内核更改的解决方案,但如果必要,我也可以接受它们。
只是一个想法:FUSE是否是一个答案?