我将自己分配进程,有没有办法在分叉之前将open()重定向到我自己的函数,并在exec()之后将它保留在子进程中?
编辑:这背后的想法是我想通过中间进程tee()将数据从一个管道传输到所有其他管道来实现多读取器管道.我希望这对我的子进程是透明的,这样他们就可以获取文件名并打开()它,如果是管道,我会返回它的文件描述符,如果它是普通文件,我将它传递给常规的open()函数.任何可以做到这一点的方法都可以使子流程透明,这听起来很有意思.我不想编译一个必须预先链接的单独库.
解决方法 我相信这里的答案是否定的,这是不可能的.据我所知,实现这一目标的方法只有三种:> LD_PRELOAD技巧,编译一个预先加载的.so来覆盖系统调用
>实现FUSE文件系统并将路径传递给客户端程序,拦截调用.
>使用PTRACE拦截系统调用,并根据需要进行修复.
2和3将非常慢,因为它们必须拦截每个I / O调用并交换回用户空间来处理它.可能比正常情况慢500%. 1需要构建和维护要链接的外部共享库.
对于我的应用程序,我只是希望能够传递到管道的路径,我意识到我可以在我的进程中打开两端(通过pipe()),然后去抓取读取端的路径/ proc // fd并将该路径传递给客户端程序,这给了我想到的一切.
总结以上是内存溢出为你收集整理的linux – 我可以在调用fork之前覆盖系统函数吗?全部内容,希望文章能够帮你解决linux – 我可以在调用fork之前覆盖系统函数吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)