免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7337 | 回复: 9

[C] 有没有类似lib9p的库 [复制链接]

论坛徽章:
0
发表于 2014-01-04 17:00 |显示全部楼层
正在写一个SDK,想通过文件或者IPC的方式诊断某进程内业务运行状况,lib9p和libixp虽然提供了一套类文件操作的API,但需要特定的工具来发送IPC指令,使用起来不是很便捷

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2014-01-05 05:49 |显示全部楼层
9p指的是9p文件系统? 类似wmii(一个窗口管理器,将内部状态以及控制方式通过9p文件系统服务提供)与wmiir(wmii附带的一个9p客户端)那样的?

这是wmii的9p服务:

  1. $ stat -c '%A %F %u %g %n' "/tmp/ns.$USER.${DISPLAY%.0}/wmii"
  2. srwx------ socket 1000 1000 /tmp/ns.ownwaterloo.:0/wmii
复制代码
可以用wmiir这个客户端访问这个文件系统:

  1. $ wmiir ls /
  2. client/
  3. colrules
  4. ctl
  5. event
  6. keys
  7. lbar/
  8. rbar/
  9. tag/
  10. tagrules

  11. $ wmiir ls /client/sel
  12. ctl
  13. label
  14. props
  15. tags
复制代码
可以读取文件来获取wmii的状态:

  1. $ wmiir read /client/sel/props
  2. emacs:Emacs23:
复制代码
也可以写入文件来改变wmii的状态:

  1. $ wmiir write /client/sel/ctl <<< 'Fullscreen toggle'
复制代码
如果是的话。。。 可以试着挂载9p:

  1. $ mkdir -p ~/mnt/wmii/
  2. $ sudo mount -t 9p "/tmp/ns.$USER.${DISPLAY%.0}/wmii" ~/mnt/wmii -o trans=unix,noextend,dfltuid=$(id -u),dfltgid=$(id -g)
复制代码
之后就可以直接当作文件读写而不需要借助wmiir了:

  1. $ cat ~/mnt/wmii/client/sel/props
  2. emacs:Emacs23:
  3. $ echo Fullscreen toggle >> ~/mnt/wmii/client/sel/ctl
复制代码
详细的文档在: https://www.kernel.org/doc/Documentation/filesystems/9p.txt 。 包括怎么挂载tcp的9p服务。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2014-01-05 06:10 |显示全部楼层
也可以用9pfuse(https://github.com/aperezdc/9pfuse)与fusermount来挂载与卸载:

  1. $ 9pfuse "/tmp/ns.$USER.${DISPLAY%.0}/wmii" ~/mnt/wmii
  2. $ fusermount -u ~/mnt/wmii/
复制代码
于是就不需要为了一个该死的WM而用root,sudo或者修改/etc/fstab,/etc/sudoers什么的了。。。

如果连挂载的操作都想避免应该可以从里面扣出一部分源代码放在提供9p的程序里然后让这个程序运行后就挂载。

如果目的是想将进程状况通过文件系统暴露(类似/proc)而不是使用9p应该可以直接用fuse(http://fuse.sourceforge.net/)? 9pfuse也依赖这货。
否则如果9p避免不了 —— 比如wmii已经使用9p于是只好顺着它来 —— 就只好用9pfuse了。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2014-01-05 06:19 |显示全部楼层
忘记将代码push上去了(改了下Makefile)。。。 不过按作者的尿性来看。。。 即使早点发送pull request他也是不会理的。。。

论坛徽章:
0
发表于 2014-01-05 10:48 |显示全部楼层
回复 2# OwnWaterloo


正是如此,但wmii所用的libixp貌似老长时间没更新过了,而且没见到用在服务器上的案例,所以想问问看是否有替代方案

目前我们的系统关于业务的运行状态有三个存放地点,但彼此同步不是很好(三个java程序员的三个模块,大家都懂的...)。所以我想通过底层C的SDK统一提供业务状态信息:SDK内部设计一个状态机来跟踪业务运行状态,状态机由业务对SDK API的调用驱动,SDK自己开一个线程处理9p的RPC调用。

总的来说,应该和一般服务器程序通过RPC提供管理接口的设计差不多,但需要向业务开发人员隐藏该机制,毕竟视频算法的开发人员对于系统编程和数据库一般不是很熟悉。

论坛徽章:
0
发表于 2014-01-05 10:55 |显示全部楼层
回复 3# OwnWaterloo


为了对算法开发人员隐藏数据库的细节,我们已经写了一个映射nosql数据库的fuse模块了。但感觉业务每启动一个实例就启动一个fuse进程开销太大。所有业务实例共用一个fuse进程稳定性不够好。

现在使用9p或者libixp也比较犹豫,因为java和调用9p可能比较麻烦。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2014-01-14 09:44 |显示全部楼层
reiase 发表于 2014-01-05 10:48
回复 2# OwnWaterloo

wmii所用的libixp貌似老长时间没更新过了,而且没见到用在服务器上的案例


确实如此。。。 apt-cache里对libixp的介绍。。。
This is a an extremly simple 9P stand-alone library. 9P is a virtual filesystem
from the Plan9 operating system.
.
libixp is currently only used by wmii (window manager improved, version 3).

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2014-01-14 10:02 |显示全部楼层
reiase 发表于 2014-01-05 10:55
回复 3# OwnWaterloo

但感觉业务每启动一个实例就启动一个fuse进程开销太大。所有业务实例共用一个fuse进程稳定性不够好。

开发代价低一点的(不需要在内核里做什么手脚)但又能表现为文件的就只有fuse? 9p(libixp)如果要表现为文件貌似也还是离不开它的样子。。。
其他方案稳定性会不会更差。。。


reiase 发表于 2014-01-05 10:55
回复 3# OwnWaterloo

现在使用9p或者libixp也比较犹豫,因为java和调用9p可能比较麻烦。

其实如果是java的话。。。  直接用非文件形式的通信(restful,xmlrpc,soap,...)他们可能更熟悉与习惯一些。。。


reiase 发表于 2014-01-05 10:48
回复 2# OwnWaterloo

毕竟视频算法的开发人员对于系统编程和数据库一般不是很熟悉

习惯文件读写? 原本是想让其他开发人员使用sdk并且将状态暴露为文件形式然后让这部分开发人员用文件去操作?
如果这个sdk的服务对象换一下。。。  让其他开发人员用他们熟悉的各种乱七八糟的技术。。。  而让这部分开发人员使用这个sdk? 看上去像是在读写文件实际上就是和那堆技术通信?


总之。。。 要揉和各个领域的开发人员不是很容易的事情。。。 good luck。。。

论坛徽章:
0
发表于 2014-01-14 14:16 |显示全部楼层
OwnWaterloo 发表于 2014-01-14 10:02
开发代价低一点的(不需要在内核里做什么手脚)但又能表现为文件的就只有fuse? 9p(libixp)如果要表现为文件 ...


不清楚,内核应该有更方便的API,比如sys,proc文件系统都提供类似机制

OwnWaterloo 发表于 2014-01-14 10:02
其实如果是java的话。。。  直接用非文件形式的通信(restful,xmlrpc,soap,...)他们可能更熟悉与习惯一些。。。


文件系统形象直观啊,不需要定义协议。文件系统的树形结构是自定义的,ls看下就知道怎么读写了。

OwnWaterloo 发表于 2014-01-14 10:02
习惯文件读写? 原本是想让其他开发人员使用sdk并且将状态暴露为文件形式然后让这部分开发人员用文件去操作?
如果这个sdk的服务对象换一下。。。  让其他开发人员用他们熟悉的各种乱七八糟的技术。。。  而让这部分开发人员使用这个sdk? 看上去像是在读写文件实际上就是和那堆技术通信?


总体思想是少用函数API,多用文件API。代码依赖少了,构建就顺畅了

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2014-01-24 13:49 |显示全部楼层
回复 9# reiase

>> 不清楚,内核应该有更方便的API,比如sys,proc文件系统都提供类似机制

sys和proc确实有。 但貌似必须在内核空间?
之前为了读取一个奇怪的地址时写过。。。 但最终没敢用。。。 而且还要重新编译内核才能拿到Module.symvers(Ubuntu仓库里倒是可以直接下载,但那时用的那个发行版里没有)。。。

>> 文件系统形象直观啊,不需要定义协议。文件系统的树形结构是自定义的,ls看下就知道怎么读写了。

这样确实很爽。。。 非常爽。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP