关于文件系统的几个疑问?

hi,关于QNX的文件系统,我有几个疑问,请大家帮我释疑: :stuck_out_tongue:

  1. unioned filesystem mountpoints问题
    如果两个文件系统加载在同一个结点上,并且存在文件冲突,
    比如文件系统serverA有/bin/ls, 文件系统serverB也有/bin/ls, QNX能处理吗?
    怎么处理的?
  2. 在QNX里,fd的定义和传统Unix定义不一样,不是全局的,是属于进程的,
    那么还有标准输出/输入/出错描述符(0/1/2)的说法吗?是怎么回事?
  3. 关于设备与加载的关系问题
    比如,我df我的QNX系统
    /pkgs/repository/pu 0 0 0 100% /
    /dev/hd0t79 8385867 1403993 6981874 17% /
    /boot/fs/qnxbase.qf 98785 98001 784 100% /pkgs/base/
    /dev/cd0 1378560 1378560 0 100% /fs/cd0/
    /dev/hd0 8388608 8388608 0 100%
    那么,应该怎么读解呢?/dev/cd0和/dev/hd0, /dev/hd0t79都相对好理解一点,至少可以理解为设备文件,
    而/boot/fs/qnxbase.qfs和/pkgs/repository/public(我补齐了全称),一个是文件名,一个是目录名, 应该怎么理解?
    谢谢!!
    请大家讨论~~~

取决于serverA和serverB创建mountpoint的次序(resmgr_attach())。通常是最后创建的那个先得到请求。

服务器还可以用resmag_attach()的_RESMGR_FLAG_AFTER/_RESMGR_FLAG_BEFORE来调整自己的位置。

伟统Unix(Linux, BSD, Solaris)的fd也是属于进程的。如果你是说VxWorks,那个算不得传统Unix. :slight_smile:

.qfs其实就是一个QNX 文件系统镜像文件。就好象你可以mount一个CD镜像(.iso)到一个mountpoint一样。

非常感谢xtang的答疑!!
关于fd的问题,我说的不够清楚。我的意思是
在传统Unix下,我们知道文件描述符0/1/2一般是指标准输出,输入,出错。
一般我们在一个进程打开一个文件(套接字)得到的描述符都是从3开始的,对吗?
那么QNX好像不是这样,那么QNX是怎么定位标准输出,输入,出错?

QNX也是的啊。如果你写一个程序,第一句话就是open()的话,返回的fd应该
是3啊。

要注意的是,ConnectAttach()返回的coid,其实通常也是一个fd,(或者说,open()里面调用的就是ConnectAttach())。所以如果你在open()前用过ConnectAttach()的话,那么你的open()会返回4, 或者5了。

只有ConnectAttach()用了_NTO_SIDE_CHANNEL的时候,那个coid才同一般的fd区分开来。

喔,非常感谢!!
我理解出错了,我是看sys_arch里的file descriptor里举例总是从0,1开始,而误解了。谢谢。。。 :blush: