Linux 我可以在调用fork之前重写系统函数吗?
我希望能够从我启动的任何子进程中截取带有特定前缀的文件名。这将是一个类似的名字“pipe://pipe_name". 我认为对我的应用程序来说,包装open()系统调用是一种很好的方法,但我希望这样做,而不必编译单独的共享库并使用LD_预加载技巧将其挂接(或者使用FUSE并安装目录) 我将自己对进程进行分叉,有没有办法在分叉之前将open()重定向到我自己的函数,并在exec()之后将其保留在子进程中Linux 我可以在调用fork之前重写系统函数吗?,linux,Linux,我希望能够从我启动的任何子进程中截取带有特定前缀的文件名。这将是一个类似的名字“pipe://pipe_name". 我认为对我的应用程序来说,包装open()系统调用是一种很好的方法,但我希望这样做,而不必编译单独的共享库并使用LD_预加载技巧将其挂接(或者使用FUSE并安装目录) 我将自己对进程进行分叉,有没有办法在分叉之前将open()重定向到我自己的函数,并在exec()之后将其保留在子进程中 编辑:这背后的想法是,我希望通过中间进程tee()实现多个读卡器管道,将数据从一个管道传输到
编辑:这背后的想法是,我希望通过中间进程tee()实现多个读卡器管道,将数据从一个管道传输到所有其他管道。我希望这对我的子进程是透明的,这样它们就可以获取一个文件名并打开它,如果它是管道,我将返回它的文件描述符,而如果它是普通文件,我将把它传递给常规的open()函数。任何使其对子进程透明的替代方法都很有趣。我不想编译一个单独的库,它必须预先链接。我相信这里的答案是否定的,这是不可能的。据我所知,实现这一目标的方法只有三种:
对于我的应用程序,我只是希望能够传入到管道的路径,我意识到我可以在进程中打开两端(通过管道()),然后在/proc//fd中获取读取端的路径,并将该路径传递给客户端程序,这将提供我所需的一切。您可以控制您执行的进程吗?这是你的代码吗?理论上是的,但我想要一个适用于任何二进制文件的解决方案…我认为如果没有LD_预加载技巧,这是不可能的。使用它应该可以很好地工作。这也是我的想法,不过我真的不想建立一个单独的库。我正在尝试构建一个只包含标题的库。