linux阻止文件描述符在程序退出时关闭

时间:2017-02-03 05:06:57

标签: c++ c linux file unix

我有一个特殊的用例,在linux上使用uinput http://thiemonge.org / getting-started-with-uinput ,创建虚拟输入设备的过程,如果它在默认情况下消失,则释放所有打开的文件描述符。





在此它还会释放创建的虚拟输入设备,并且设备变平从/ dev / input中消失。





我想知道是否有这个问题的简单解决方案,最明显的是在程序终止时不释放打开的文件描述符。产生代理进程以简单地保存FD的比较烦人。




1 个答案:

答案 0 :(得分:1)

我最终采用了代理方式:

void main(int argc, char **argv) {
   create_uinput_device();
   print_eventn();
   set_argv0_eventn();
   if (fork()) {
       return;
   } else {
       //hold the uinput fd
       while(1) { sleep(1000); }
   }
}

这样当我们cat / proc / [p] / cmdline时,我们可以很容易地找到/ dev / input / event [n]以及哪个pid当前持有它。我们可以将新的cmdline memcpy到argv0。所以这是一个黑客攻击。

同样方便的是,当我们运行这个程序时,我们立即返回我们需要转发到qemu的/ dev / input / event [n]设备;由于印刷。

要真正解决此问题,有人需要合并到qemu更改中,因此qemu本身会创建虚拟输入设备,由于可以传递大量选项,因此这非常复杂。无论如何,uinput创建的虚拟输入设备将与qemu实例一样长。