ouyang
1
hi,关于QNX的文件系统,我有几个疑问,请大家帮我释疑:
- unioned filesystem mountpoints问题
如果两个文件系统加载在同一个结点上,并且存在文件冲突,
比如文件系统serverA有/bin/ls, 文件系统serverB也有/bin/ls, QNX能处理吗?
怎么处理的?
- 在QNX里,fd的定义和传统Unix定义不一样,不是全局的,是属于进程的,
那么还有标准输出/输入/出错描述符(0/1/2)的说法吗?是怎么回事?
- 关于设备与加载的关系问题
比如,我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(我补齐了全称),一个是文件名,一个是目录名, 应该怎么理解?
谢谢!!
请大家讨论~~~
xtang1
2
取决于serverA和serverB创建mountpoint的次序(resmgr_attach())。通常是最后创建的那个先得到请求。
服务器还可以用resmag_attach()的_RESMGR_FLAG_AFTER/_RESMGR_FLAG_BEFORE来调整自己的位置。
伟统Unix(Linux, BSD, Solaris)的fd也是属于进程的。如果你是说VxWorks,那个算不得传统Unix.
.qfs其实就是一个QNX 文件系统镜像文件。就好象你可以mount一个CD镜像(.iso)到一个mountpoint一样。
ouyang
3
非常感谢xtang的答疑!!
关于fd的问题,我说的不够清楚。我的意思是
在传统Unix下,我们知道文件描述符0/1/2一般是指标准输出,输入,出错。
一般我们在一个进程打开一个文件(套接字)得到的描述符都是从3开始的,对吗?
那么QNX好像不是这样,那么QNX是怎么定位标准输出,输入,出错?
xtang1
4
QNX也是的啊。如果你写一个程序,第一句话就是open()的话,返回的fd应该
是3啊。
要注意的是,ConnectAttach()返回的coid,其实通常也是一个fd,(或者说,open()里面调用的就是ConnectAttach())。所以如果你在open()前用过ConnectAttach()的话,那么你的open()会返回4, 或者5了。
只有ConnectAttach()用了_NTO_SIDE_CHANNEL的时候,那个coid才同一般的fd区分开来。
ouyang
5
喔,非常感谢!!
我理解出错了,我是看sys_arch里的file descriptor里举例总是从0,1开始,而误解了。谢谢。。。