当前位置: 首页 > news >正文

找做金融的网站有哪些/网站结构优化的内容和方法

找做金融的网站有哪些,网站结构优化的内容和方法,开发系统的流程,建设课程网站的目的一、概述 进程间通信(interprocess communication,简称 IPC)指两个进程之间的通信。系统中的每一个进程都有各自的地址空间,并且相互独立、隔离,每个进程都处于自己的地址空间中。所以同一个进程的不同模块譬如不同的函…

一、概述

  进程间通信(interprocess communication,简称 IPC)指两个进程之间的通信。系统中的每一个进程都有各自的地址空间,并且相互独立、隔离,每个进程都处于自己的地址空间中。所以同一个进程的不同模块譬如不同的函数)之间进行通信都是很简单的,譬如使用全局变量等。但是,两个不同的进程之间要进行通信通常是比较难的,因为这两个进程处于不同的地址空间中。
  Linux 内核提供了多种 IPC 机制,其中System V IPC 包括:System V 信号量、System V消息队列、System V 共享内存。这三种通信机制有很多相似之处。
在这里插入图片描述

  消息队列是消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺陷。消息队列是 UNIX 下不同进程之间实现共享资源的一种机制,UNIX 允许不同进程将格式化的数据流以消息队列形式发送给任意进程,有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。
  消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。但是消息队列的每个数据块都有一个最大长度的限制。
  Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。

二、Linux中使用消息队列的API

2.1、ftok函数

  系统建立IPC通讯 (消息队列、信号量和共享内存) 时必须指定一个ID值。通常情况下,该id值通过ftok函数得到。函数原型:

key_t ftok( const char * fname, int id )

  fname:就是指定的文件名(已经存在的文件名),一般使用当前目录
  id:子序号。虽然是int类型,但是只使用8bits(1-255)。
  返回值:消息队列使用的ID值。

2.2、msgget函数

  该函数用来创建一个消息队列。它的原型为:

int msgget(key_t, key, int msgflg);

  key:消息队列关联的键,由ftok函数产生。
  msgflg:消息队列的建立标志和存取权限。
  返回值:成功执行时,返回消息队列标识值。失败返回-1。
  与其他的IPC机制一样,程序必须提供一个键来命名某个特定的消息队列。msgflg是一个权限标志,表示消息队列的访问权限,它与文件的访问权限一样。msgflg可以与IPC_CREAT做或操作,表示当key所命名的消息队列不存在时创建一个消息队列,如果key所命名的消息队列存在时,IPC_CREAT标志会被忽略,而只返回一个标识符。

2.3、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.

2.4、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:用于控制当队列中没有相应类型的消息可以接收时将发生的事情。是控制函数行为的标志,取值可以是:
    0,表示忽略;
    IPC_NOWAIT,如果消息队列为空,则返回一个ENOMSG,并将控制权交回调用函数的进程。如果不指定这个参数,那么进程将被阻塞直到函数可以从队列中得到符合条件的消息为止。如果一个client 正在等待消息的时候队列被删除,EIDRM 就会被返回。如果进程在阻塞等待过程中收到了系统的中断信号,EINTR 就会被返回。
    MSG_NOERROR,如果函数取得的消息长度大于msgsz,将只返回msgsz 长度的信息,剩下的部分被丢弃了。如果不指定这个参数,E2BIG 将被返回,而消息则留在队列中不被取出。
   返回值:调用成功时,该函数返回放到接收缓存区中的字节数,消息被复制到由msg_ptr指向的用户分配的缓存区中,然后删除消息队列中的对应消息。失败时返回-1。当消息从队列内取出后,相应的消息就从队列中删除了。

2.5、msgctl函数

  该函数用来控制消息队列,它与共享内存的shmctl函数和信号量semctl相似,它的原型为:

int msgctl(int msgid, int command, struct msgid_ds *buf);

  msgid:是由msgget函数返回的消息队列标识符。
  ommand:是将要采取的动作,它可以取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.

三、例程

3.1、接收消息队列例程

  接收信息的程序源文件为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; //注意1key_t msg_key = Ftok(FILD_LOAD, 'a'));//获取系统IPC键值//建立消息队列msgid = msgget(msg_key, 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);
}

3.2、发送消息队列例程

  发送信息的程序的源文件msgsend.c的源代码为:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/msg.h>
#include <errno.h>#define MAX_TEXT 512
struct 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;key_t msg_key = Ftok(FILE_PATH, 'a'));//获取系统IPC键值//建立消息队列msgid = msgget(msg_key, 0666 | IPC_CREAT);if(msgid == -1){fprintf(stderr, "msgget failed with error: %d\n", errno);exit(EXIT_FAILURE);}//向消息队列中写消息,直到写入endwhile(running){//输入数据printf("Enter some text: ");fgets(buffer, BUFSIZ, stdin);data.msg_type = 1;    //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);
}
http://www.jmfq.cn/news/5284351.html

相关文章:

  • 西安网站开发公司定制/经典品牌推广文案
  • 东莞网站seo优化托管/免费推广自己的网站
  • wordpress+海+主题/seo网络优化软件
  • 福州制作网站软件/杭州seo服务公司
  • 建行商城网站/芭蕉视频app无限次数
  • 网站开发什么是会话/如何做电商新手入门
  • 应聘的做网站推广的/苏州网站制作公司
  • 便宜购 网站建设/seo公司官网
  • 徐汇做网站/找培训班一般在什么平台
  • 东莞市长安镇做网站/营销咨询顾问
  • 网站建设用cms/晚上网站推广软件免费版
  • 网站 502错误/培训机构管理系统哪个好
  • 个人建设网站程序/百度关键词搜索技巧
  • 领地申请的网站能备案吗/市场营销公司
  • 电商网站分析报告/seo是什么意思蜘蛛屯
  • 专业网站建设套餐/企业培训课程ppt
  • 胶州网站搭建公司/大型seo公司
  • 如何在网站投放广告/一键开发小程序
  • 做网站即墨/我赢seo
  • 读心王爷太难缠/seo整站优化费用
  • 科技局网站查新怎么做/烟台seo快速排名
  • 蚌埠网站建设兼职/seo搜索引擎优化工具
  • 香洲网站建设/免费一键生成个人网站
  • 企业网站建设报价方案/seo技术培训教程
  • 做网咖的网站/怎么创建网站?
  • 电子商务网站规划设计方案/网站搜索引擎优化报告
  • 帮传销做网站违法吗/合肥优化推广公司
  • 给实体店老板做的网站/百度竞价开户费用
  • 网站开发行业标准/seo网站管理招聘
  • 做散热网站/全国31省市疫情最新消息今天