Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2336737
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: LINUX

2010-10-21 09:01:00

简单说, 它让你对所有显而易见的路径名的理解失效. 我最近一次遭遇这个问题是通过 dlopen动态打开so文件时碰到的, 在vsftpd内部加载它, 而vsftpd是典型的会chroot的程序, 在何处load动态库是关键, 一般来说, 碰到这种加载dlopen失败的问题, 第一反应是检查路径存在与否, 权限是否允许, 如果不是绝对路径, 是否在LD_LIBARARY_PATH等等, 是否是递归依赖的其它动态库找不到(windows上加载DLL就经常碰到这个问题). 但最终的解决办法是把dlopen的调用时机调到了main中刚开始的位置, 此时还没有进行chroot.

原本想在多个进程之间实现数据共享的一个办法是通过普通文件, 然后用一个文件锁open(..., O_CREAT | O_EXCL)来实现排它性访问, 同样是在碰到chroot时没了办法, 所有基于层次状文件系统的方案都不可用了. 因为chroot让你对固定的绝对路径名的理解失效了. 最后的替代方案是用共享内存, 附加一个semaphore控制对共享内存的独占性访问.

以后在考虑这种进程间通讯方案时, 需要加一个case, 参与通讯的进程, 有无可能chroot, 若有, 则不能用基于文件系统的方案了.
阅读(1303) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~