msgid是什么文件|如何用JAVA实现Linux上的消息队列功能

A. adaptmsgidlist.cld是什么文件

-地图数据文件。 解压后得到以下几个文件

B. 如何用JAVA实现Linux上的消息队列功能

下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处。有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信——使用命名管道一、什么是消息队列消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。二、在Linux中使用消息队列Linux提供了一系列消息队列的函数接口来让我们方便地使用它来实现进程间的通信。它的用法与其他两个System V PIC机制,即信号量和共享内存相似。1、msgget函数该函数用来创建和访问一个消息队列。它的原型为:int msgget(key_t, key, int msgflg);与其他的IPC机制一样,程序必须提供一个键来命名某个特定的消息队列。msgflg是一个权限标志,表示消息队列的访问权限,它与文件的访问权限一样。msgflg可以与IPC_CREAT做或操作,表示当key所命名的消息队列不存在时创建一个消息队列,如果key所命名的消息队列存在时,IPC_CREAT标志会被忽略,而只返回一个标识符。它返回一个以key命名的消息队列的标识符(非零整数),失败时返回-1.2、msgsnd函数该函数用来把消息添加到消息队列中。它的原型为:int msgsend(int msgid, const void *msg_ptr, size_t msg_sz, int msgflg);msgid是由msgget函数返回的消息队列标识符。msg_ptr是一个指向准备发送消息的指针,但是消息的数据结构却有一定的要求,指针msg_ptr所指向的消息结构一定要是以一个长整型成员变量开始的结构体,接收函数将用这个成员来确定消息的类型。所以消息结构要定义成这样:struct my_message{ long int message_type; /* The data you wish to transfer*/};msg_sz是msg_ptr指向的消息的长度,注意是消息的长度,而不是整个结构体的长度,也就是说msg_sz是不包括长整型消息类型成员变量的长度。msgflg用于控制当前消息队列满或队列消息到达系统范围的限制时将要发生的事情。如果调用成功,消息数据的一分副本将被放到消息队列中,并返回0,失败时返回-1.3、msgrcv函数该函数用来从一个消息队列获取消息,它的原型为int msgrcv(int msgid, void *msg_ptr, size_t msg_st, long int msgtype, int msgflg);msgid, msg_ptr, msg_st的作用也函数msgsnd函数的一样。msgtype可以实现一种简单的接收优先级。如果msgtype为0,就获取队列中的第一个消息。如果它的值大于零,将获取具有相同消息类型的第一个信息。如果它小于零,就获取类型等于或小于msgtype的绝对值的第一个消息。msgflg用于控制当队列中没有相应类型的消息可以接收时将发生的事情。调用成功时,该函数返回放到接收缓存区中的字节数,消息被复制到由msg_ptr指向的用户分配的缓存区中,然后删除消息队列中的对应消息。失败时返回-1.4、msgctl函数该函数用来控制消息队列,它与共享内存的shmctl函数相似,它的原型为:int msgctl(int msgid, int command, struct msgid_ds *buf);command是将要采取的动作,它可以取3个值, IPC_STAT:把msgid_ds结构中的数据设置为消息队列的当前关联值,即用消息队列的当前关联值覆盖msgid_ds的值。 IPC_SET:如果进程有足够的权限,就把消息列队的当前关联值设置为msgid_ds结构中给出的值 IPC_RMID:删除消息队列buf是指向msgid_ds结构的指针,它指向消息队列模式和访问权限的结构。msgid_ds结构至少包括以下成员:struct msgid_ds{ uid_t shm_perm.uid; uid_t shm_perm.gid; mode_t shm_perm.mode;};成功时返回0,失败时返回-1.三、使用消息队列进行进程间通信马不停蹄,介绍完消息队列的定义和可使用的接口之后,我们来看看它是怎么让进程进行通信的。由于可以让不相关的进程进行行通信,所以我们在这里将会编写两个程序,msgreceive和msgsned来表示接收和发送信息。根据正常的情况,我们允许两个程序都可以创建消息,但只有接收者在接收完最后一个消息之后,它才把它删除。接收信息的程序源文件为msgreceive.c的源代码为:#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <errno.h>#include <sys/msg.h>struct msg_st{ long int msg_type; char text[BUFSIZ];};int main(){ int running = 1; int msgid = -1; struct msg_st data; long int msgtype = 0; //注意1 //建立消息队列 msgid = msgget((key_t)1234, 0666 | IPC_CREAT); if(msgid == -1) { fprintf(stderr, "msgget failed with error: %d\n", errno); exit(EXIT_FAILURE); } //从队列中获取消息,直到遇到end消息为止 while(running) { if(msgrcv(msgid, (void*)&data, BUFSIZ, msgtype, 0) == -1) { fprintf(stderr, "msgrcv failed with errno: %d\n", errno); exit(EXIT_FAILURE); } printf("You wrote: %s\n",data.text); //遇到end结束 if(strncmp(data.text, "end", 3) == 0) running = 0; } //删除消息队列 if(msgctl(msgid, IPC_RMID, 0) == -1) { fprintf(stderr, "msgctl(IPC_RMID) failed\n"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS);}发送信息的程序的源文件msgsend.c的源代码为:#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <sys/msg.h>#include <errno.h>#define MAX_TEXT 512struct msg_st{ long int msg_type; char text[MAX_TEXT];};int main(){ int running = 1; struct msg_st data; char buffer[BUFSIZ]; int msgid = -1; //建立消息队列 msgid = msgget((key_t)1234, 0666 | IPC_CREAT); if(msgid == -1) { fprintf(stderr, "msgget failed with error: %d\n", errno); exit(EXIT_FAILURE); } //向消息队列中写消息,直到写入end while(running) { //输入数据 printf("Enter some text: "); fgets(buffer, BUFSIZ, stdin); data.msg_type = 1; //注意2 strcpy(data.text, buffer); //向队列发送数据 if(msgsnd(msgid, (void*)&data, MAX_TEXT, 0) == -1) { fprintf(stderr, "msgsnd failed\n"); exit(EXIT_FAILURE); } //输入end结束输入 if(strncmp(buffer, "end", 3) == 0) running = 0; sleep(1); } exit(EXIT_SUCCESS);}转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦

C. 【求人翻】英语文章翻译

根据你所在的国家,创建一个语言文件夹(合适的文件夹名称形如en_US, nl_NL, ru_RU之类 )【1】。复制PO文件到相应的文件夹,然后即可开始编辑。选择的顺序如果有cheatengine.po文件,那么将会选它;如果没有,会选择cheatengine-x86_64.po文件;cheatengine-x86_64.po文件也没有,就会选cheatengine-i386.po文件。32位版本的本软件能和64位po文件完美兼容。默认情况下,本软件选择系统语言,但是你可以通过在Cheat Engine运行参数后加“LANG langstr “或“or -l langstr ” 更改它。编辑po文件软件自带编辑工具,但你也可手动编辑它。msgid 包含的是最初的原始文本字符串,msgstr包含的是翻译后的文本字符串。如果msgstr为空,那么显示的将是原始字符串。某些特定字符串在cheatengine.po文件里不会被显示,但在lclstrconsts.po文件里会被显示。lclstrconsts.po文件属于LCL。Cheat Engine 的图形用户界面就是基于LCL构建的。 【1】比如中国,那么取名Ch_Ch

D. msg是什么格式的文件,用什么打开

Msg文件格式是微软outlook软件,outlook邮件客户端的格式。

通常,我们都使用Outlook程序来打开MSG文件,但你也可以不安装Outlook程序,而是用其他软件来浏览文件内容,你可以使用任何一款基本文字编辑软件来浏览MSG文件的内容,具体操作步骤如下。

1、首先,请找到你想打开的MSG文件。

E. 三星手机里msgid是什么

如需下载手机/平板电脑使用说明书以及使用指南,请按以下方法操作1.登陆【三星官网】,在右上角搜索框中输入型号进行搜索。2.点击“产品”中的具体型号进入产品页面-服务支持-用户手册-点击下载即可。注:仅部分型号支持下载用户手册。

F. 高手帮忙翻译一下哦!谢谢!

一个文件将要被翻译,如果你翻译了请让我明白你的意思。例如,你看到了很多消息。MSGID "BS_CONTENT_SAVED" msgstr "Content %s saved" (消息ID为BS_CONTENT_SAVED,消息字符串为Content %s saved)。不要翻译msgid里面提供的内容。例如,不要翻译BS_CONTENT_SAVED,而要翻译msgstr里面的内容。所以,Content %s saved,翻译为,コンテンツ%sを保存。请像例句那样保留%s,谢谢。比如msgstr "Change my account password."需要翻译Change my account password,修改我的帐户密码,等等。自己翻译试试吧。呵呵。

G. msginit将中文翻译成英语的命令是什么

msgid 信息id用以确定那个结果需要返回的操作或者. 是LDAP_RES_ANY如果需要结果.

H. edx怎么设置中文

edx设置中文的办法是:汉化的时候我们可能要注册transifex的账号,这是一个国家化edx的平台,很多很棒的人都在做这项工作。汉化的过程中我们需要安装transifex的客户端并且配置文件,这些网上有教程。

首先paver i18n_extract是提取可以翻译的的字符串。在conf/locale/en这个文件夹里。我们要做到就是在这个文件夹对应的文件下面找到具体要翻译的字符串以及注释。格式一般是:

# 文件位置msgid "string"、msgstr ""。

然后在你要汉化的语言的对应文件夹下找到相应文件名的文件,将上面的文字复制到文件中,再在msgstr中添加相应的翻译即可。

完成之后paver i18n_generate产生.mo文件,然后重启服务器即可。

edx选择课程有:

注册了账号之后,你就可以开始选择课程了。我最开始知道edX的时候,看着眼花缭乱的课程,就像是掉进米缸的老鼠,幸福感爆棚。

edX的课程包括教育、设计、金融、沟通、计算机科学、商业管理、音乐等30个类别。你可以直接找你想要的课程类别,也可以搜索关键词,比如positive psychology。

I. python模块i18n怎么导入

Python通过gettext模块支持国际化(i18n),可以实现程序的多语言界面的支持,下面是我的多语言支持实现:1. 在python安装目录下的./Tools/i18n/(windows下例 D:\Program Files\Python25\Tools\i18n)目录中找到pygettext.py运行之,生成翻译文件模版messages.pot,内容大概是这个样子:# SOME DESCRIPTIVE TITLE.# Copyright (C) YEAR ORGANIZATION# FIRST AUTHOR <[email protected]>, YEAR.#msgid ""msgstr """Project-Id-Version: PACKAGE VERSION\n""POT-Creation-Date: 2007-01-24 15:05+China Standard Time\n""PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n""Last-Translator: FULL NAME <[email protected]>\n""Language-Team: LANGUAGE <[email protected]>\n""MIME-Version: 1.0\n""Content-Type: text/plain; charset=CHARSET\n""Content-Transfer-Encoding: ENCODING\n""Generated-By: pygettext.py 1.5\n"改之,charset=gb2312 Content-Transfer-Encoding: utf8如下:# SOME DESCRIPTIVE TITLE.# Copyright (C) YEAR ORGANIZATION# FIRST AUTHOR <[email protected]>, YEAR.#msgid ""msgstr """Project-Id-Version: PACKAGE VERSION\n""POT-Creation-Date: 2007-01-18 09:55+China Standard Time\n""PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n""Last-Translator: FULL NAME <[email protected]>\n""Language-Team: LANGUAGE <[email protected]>\n""MIME-Version: 1.0\n""Content-Type: text/plain; charset=gb2312\n""Content-Transfer-Encoding: utf8\n""Generated-By: pygettext.py 1.5\n"那个msgid” ” 和msgstr” “不要动好,翻译文件已经建立了,保存之,文件名改为lang.po.2. 建立翻译文件路径,在主文件目录下建立中文翻译路径 ./locale/cn/LC_MESSAGES/(windows下例D:\ python-prj\src\locale\cn\LC_MESSAGES,其中src目录是源文件主目录),英文翻译路径 ./locale/en/LC_MESSAGES/(windows下例D:\ python-prj\src\locale\en\LC_MESSAGES,其中src目录是源文件主目录)3. 在主文件中引入gettext模块:# -*- coding: utf-8 -*-#!/usr/bin/env pythonimport gettextgettext.install('lang', './locale', unicode=False)gettext.translation('lang', './locale', languages=['cn']).install(True)第四行中lang是翻译文件主名, ./locale是存放翻译文件的路径,第三个参数是是否使用unicode,第五行languages参数指定要使用的语言存放的子目录,这里cn表示使用./locale/cn/LC_MESSAGES/路径下的翻译文件.注意: # -*- coding: utf-8 -*- 一定要写在前两行,写第三行都不会生效4. 处理要翻译的字符串,例:print “Hello world!”print “Python is a good Language.”改之:print _(“Hello world!”)print _(“Python is a good Language.”)5. 编写并生成翻译文件,打开步骤1中编辑过的lang.po文件添加翻译文字,形成如下内容:# SOME DESCRIPTIVE TITLE.# Copyright (C) YEAR ORGANIZATION# FIRST AUTHOR <[email protected]>, YEAR.#msgid ""msgstr """Project-Id-Version: PACKAGE VERSION\n""POT-Creation-Date: 2007-01-18 09:55+China Standard Time\n""PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n""Last-Translator: FULL NAME <[email protected]>\n""Language-Team: LANGUAGE <[email protected]>\n""MIME-Version: 1.0\n""Content-Type: text/plain; charset=gb2312\n""Content-Transfer-Encoding: utf8\n""Generated-By: pygettext.py 1.5\n"msgid " Hello world!"msgstr "世界你好!"msgid " Python is a good Language."msgstr "Python 是门好语言."保存之,运行./Tools/i18n/目录下的msgfmt.py,Linux下命令为: python msgfmt.py lang.po(widows下的话,将lang.po文件拷贝到./Tools/i18n/目录下,运行命令行窗口,到改目录下键入:msgfmt.py lang.po),生成lang.mo,将该文件拷贝至./locale/cn/LC_MESSAGES/目录下,将步骤1生成的lang.po文件直接生成lang.mo文件拷贝到./locale/en/LC_MESSAGES/目录下,好了一切都准备好了,命令行下运行你的主文件,看看两个print命令是不是输出了世界你好! Python 是门好语言.,如果将主文件第五行languages参数置为en,则输出是Hello world! Python is a good Language.,因为en目录下lang.mo文件未做任何的翻译,默认字符串不被替换.上述实现的方法用在界面编程上可以实现中英文界面的切换,需要作个配置文件选择中/英文;或者在主文件开始时先获取操作系统本地语言然后根据获取结果再设置中/英文,这样就可以实现软件语言自适应;如果想实现软件语言在线切换,对于python来说就比较困难了,需要在软件中加入界面刷新机制,不推荐,可以在切换中/英文设置后软件下一次启动生效(软件如Ulipad).Note:.调用python安装目录的 Tools/i18n/pygettext.py抽取所需翻译的模板>>> pygettext.py path/to/yourfile.py将生成一个名为messages.pot的文件2.生成模板文件后,修改这个模板文件,其中的msgid为键值,对应你程序里写的文本,如:_("New File"),而msgstr为翻译后的值。还有就是注意修改文件头部分Content-Type的charset为合适的编码,比如utf83.编写好模板后,把扩展名修改为.po,运行Tools/i18n/msgfmt.py,生成二进制的资源文件>>> msgfmt.py messages.po将生成一个名为messages.mo的文件4.把这个mo文件放在正确的位置.比如你在程序中是这样写的:gettext.install('i18ntest', './locale', unicode=True)gettext.translation('i18ntest', './locale', languages=['cn']).install(True)那么你的程序目录下需要存在./local/cn/LC_MESSAGES/i18ntest.mo这样程序启动时就会读取这个资源文件,替换对应的文本,实现国际化了。注意:如果使用utf格式保存,po文件不能有BOM头。cn目录是所对应的语言,LC_MESSAGES目录是gettext.py里要求的,mo文件必须和所定义的域同名,见gettext.py的mofile = os.path.join(localedir, lang, 'LC_MESSAGES', '%s.mo' % domain)


赞 (0)