【QNX】pps开发指南(2):对象与属性

        QNX PPS服务是一个发布者可以修改其对象属性的系统。

        订阅了对象的客户端在对象被更改时可以接收到更新通知,也就是说,当发布者修改了对象时,客户端就可感知到。

        使用PPS,您的应用程序可以:

        (1)向对象发布更改

        (2)订阅对象以接收更改通知

        (3)发布和订阅

一:对象文件(Object files)

       在专用的PPS文件系统中 PPS对象被实现成了文件。默认情况下,PPS对象存放在/ PPS 目录下,但是这个路径同时也取决于启动PPS服务时使用的-m选项。PPS对象的实例不会超过一个,因此对该对象的更改对订阅者而言是立即可见的。

        对象可以包含属性。每个属性都由对象文件中的一行文本来表示。例如,您可以发布一个名为Time的对象,它表示一天的时间,并且具有表示当前小时、分钟和秒的整数属性,如下所示:


        在本例中,文件名是Time,每个属性都是该文件中的一个文本字符串。

       由于PPS对象是由文件表示的,所以你可以进行以下操作:

        1. 创建目录,并通过在这些目录中创建文件,使用PPS对象填充目录(当然为了创建对象,您需要在PPS目录或相应的子目录中具有写权限。)

        2. 使用open(),然后使用read()和write()函数来查询和更改PPS对象。

        3. 使用标准实用程序作为简单的调试工具。

       为了避免在使用同一个PPS文件系统时,因集成了来自不同组织的应用程序可能出现的混乱或冲突,建议您使用您组织的web域名在PPS目录中创建您的目录。比如,域名为“QNX.com”的QNX软件文件系统时应该使用/pps/QNX,域名为“example.net”的组织应该使用/pps/example。

        PPS对象是通过文件系统访问的,它们看起来像普通的POSIX文件。但是,它们不是标准的POSIX文件,而且一些PPS行为与标准的POSIX行为也不同。例如,分配的读缓冲区对于被读入的数据来说如果太小,那么读操作不会返回部分写入的结果;而是直接就是失败。

二:属性顺序(Attribute order)

        PPS不保证将按照属性写入对象的顺序读取属性。也就是说,发布者(publisher)可以这样写:


        订阅者可以按以下顺序读取


        特殊的对象:

        PPS目录中同时也可以包括一些特殊的对象,您可以打开这些对象来促进订阅行为。下表列出了这些特殊对象:


        对象和目录大小:

        因为PPS将其对象保存在内存中,所以它们很小。每个对象被分配32 kb。这并不意味着每个对象在运行时使用32kb的内存;它只使用内部表示其当前属性所需的内存量。

       PPS目录和对象的数量仅受可用内存的限制。PPS目录的深度受到以下事实的限制:对象的完整路径名(文件存储在持久目录中);这些路径名的大小受所使用的持久文件系统所支持的最大文件名大小的限制。


三:变更通知(Change notification)

        PPS在创建、删除或截断对象时通知发布者和订阅者。

        当PPS创建、删除或截断一个对象(文件或目录)时,它会将一个通知字符串放入已为目录打开该对象或.all特殊对象的订阅者或发布者的队列中。

       这个通知字符串的语法是一个特殊的字符前缀,紧跟在后面是对象标识符“@”,然后是对象名称,如下所示:


        此外,当对象被删除时,PPS会向打开该对象的任何应用程序发送一个-@objectname。收到此通知的应用程序的典型行为是关闭打开的文件描述符,因为文件在文件系统中不再可见(POSIX行为)。


四:对象语法(Object syntax)

        在PPS文件系统的列表中,PPS对象并没有特殊的标识符。也就是说,它们将与列表中的任何其他文件一样出现。例如,/ PPS /media目录中的PPS对象“PlayCurrent”将以简单的/ PPS /media/PlayCurrent的形式出现在文件列表中。

        在PPS文件的读取结果中,第一行标识对象。这一行以“@”字符作为前缀,将其标识为对象名称。下面的行定义对象的属性。这些行都没有特殊的前缀。

        假设上面示例中的PPS对象“PlayCurrent”包含描述多媒体应用程序中当前播放歌曲的元数据的属性。让我们假设属性的格式如下:


        这个文件的open()调用和read()调用将返回对象的名称(文件名,带@前缀),然后是对象的属性值:


        对象名称不能包含以下任何一种字符:"@"(@符号),"?"(问号),"/"(正斜杠),换行(ASCII LF),或ASCII NUL。

        PPS对象中的每一行都以一个换行符(C中的“\n”或十六进制0A)结束,因此您必须以合作的客户端应用程序同意的方式对该字符进行编码。也就是说,任何包含ASCII LF或NULL字符的值都必须进行编码。编码字段可用于协助协作应用程序确定在值字段中使用何种编码。


五:属性语法(Attribute syntax)

        PPS对象具有用户定义的属性。在PPS对象中,属性列在对象名称之后。

        属性名可以由字母,数字字符、下划线和句点组成,但必须以字母或下划线开头。PPS对象文件中的属性行采用attrname:encoding:value\n的形式,其中attrname是属性名,encoding为值定义了编码类型。属性名的末尾和编码的末尾用冒号(":")标记。随后的冒号被忽略。

        PPS不会解释编码;它只是将编码从发布者传递到订阅者。因此,发布者和订阅者可以自由地定义他们自己的编码来满足他们的需要。下表描述了可能的编码类型:


属性的值可以是任意字符序列,除了:

    (1)NULL字符 ("\0" in C, or hexadecimal 0x00)

    (2)换行符 ("\n" in C, or hexadecimal 0x0A)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345