Linux 进程间通讯详解六
ftok()函数
key_t ftok(const char *pathname, int proj_id);
--功能:创建系统建立IPC通讯 (消息队列、信号量和共享内存) 时key值
--参数
pathname 路径名
proj_id 是一个子序列号,虽然是Int类型,但是只使用了8bit,大小是1-255,proj_id是一个非零值
--成功返回key值,失败返回-,并且设置errno
getenv()函数
char *getenv(const char *name);
--获取环境变量name的内容
--参数
name 环境变量的名字
--成功返回一个指针,指向环境变量name的内容,失败返回NULL
//消息队列--msgctl()函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h> int main(int arg, char * args[])
{
/*
* 首先创建一个SENDFILE文件,这文件用来创建一个唯一的key值
* 然后在$HOME/.bash_profile文件下添加一个环境变量节点
* 例如:export SENDFILE=$HOME/etc/SENDFILE
* 接着使用getenv()函数获取环境变量的值
* 调用ftok()生成唯一的key值
* 最后再调用msgget()函数
* */
//获取环境变量的值
char *pvalue = getenv("SENDFILE");
if (pvalue == NULL)
{
printf("getenv() failed !\n");
return -;
}
key_t key = ftok(pvalue, );
if (key == -)
{
perror("ftok() err");
return -;
}
int msqid = msgget(key, | IPC_CREAT | IPC_EXCL);
if (msqid == -)
{
//该消息队列已经存在
if (errno == EEXIST)
{
printf("消息队列已经存在!\n");
//访问消息队列
msqid = msgget(key, );
} else
{
perror("msgget() err");
return -;
}
}
printf("访问消息队列成功!msqid=%d\n", msqid);
return ;
}
Linux 进程间通讯详解六的更多相关文章
- Linux 进程间通讯详解二
消息队列 --消息队列提供了本机上从一个进程向另外一个进程发送一块数据的方法 --每个数据块都被认为有一个类型,接收者进程接收的数据块可以有不同的类型值 --消息队列也有管道一样的不足,就是每个消息的 ...
- Linux 进程间通讯详解一
进程间的通讯 两台主机间的进程通讯 --socket 一台主机间的进程通讯 --管道(匿名管道,有名管道) --System V进程间通信(IPC)包括System V消息队列,System V信号量 ...
- Linux 进程间通讯详解七
上图的一台主机服务器架构的重大缺陷是容易死锁 因为客户端,服务器都往同一消息队列中发送接收消息,假设消息队列已经满了,此时客户端无法向队列中发送消息,阻塞了,而服务器接收完一条消息后,想向消息队列发送 ...
- Linux 进程间通讯详解三
msgctl()函数 int msgctl(int msqid, int cmd, struct msqid_ds *buf); --参数 msqid:有msgget函数返回的消息队列标识码 cmd: ...
- Linux 进程间通讯详解五
msgrcv函数 ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg); --功能:是从一个消息队列接 ...
- Linux 进程间通讯详解四
msgsnd函数 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); --功能:把一条消息添加到消息队列中 --参数 ...
- Linux 进程间通讯方式 pipe()函数 (转载)
转自:http://blog.csdn.net/ta893115871/article/details/7478779 Linux 进程间通讯方式有以下几种: 1->管道(pipe)和有名管道( ...
- Linux 进程间通讯
一.Linux 下进程间通讯方式 1)管道(Pipe)及有名管道(named pipe): 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
- [转] linux系统文件流、文件描述符与进程间关系详解
http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括: ...
随机推荐
- Javaweb学习笔记——上传下载文件
一.前言 在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为comm ...
- 低调奢华 CSS3 transform-style 3D旋转
点击这里查看效果:http://keleyi.com/a/bjad/s89uo4t1.htm 效果图: CSS3 transform-style 属性 以下是代码: <!DOCTYPE html ...
- 两种文件上传的实现-Ajax和form+iframe
前言 话说现在很多很多项目需要用到文件上传,自从有了HTML5之后,上传就变的超级简单了.HTML5支持多图片上传,而且支持ajax上传,而且支持上传之前图片的预览,而且支持图片拖拽上传,而且还是纯粹 ...
- angular源码分析:angular中入境检察官$sce
一.ng-bing-html指令问题 需求:我需要将一个变量$scope.x = '<a href="http://www.cnblogs.com/web2-developer/&qu ...
- MFC-简单的函数使用
1. MessageBox(str);很简单的一个函数,该函数参数为字符串.用来弹出一个窗口显示str的内容,str为一个字符串. 2. UpdateData();该函数是vc++中处理控件变量的 ...
- VS2013新建MVC5项目,使用nuget更新项目引用后发生Newtonsoft.Json引用冲突的解决办法
错误信息如下: 错误 3 类型“Newtonsoft.Json.JsonPropertyAttribute”同时存在于“c:\Program Files (x86)\Microsoft V ...
- 渗透测试-奇技淫巧(一)--源IP地址隐藏
切记,切记.本文只作为技术交流,提醒各位注意网络安全,请勿用于其它用途,否则后果自付. 在很多时候,某某不希望不愿意有人溯源他的地址.他们是如何隐藏IP的? 今天来浅析下,如何隐藏源地址. 用到的工具 ...
- SharePoint 2013 Designer系列之自定义列表表单
在SharePoint的使用中,默认的样式过于单调经常困扰着我们,其实,SharePoint使用Designer工具,可以很轻松解决这一问题,制作出各式各样漂亮的页面.下面,让我们简单介绍下这一过程. ...
- Metasploit各版本对比
功能特性 描述 Metasploit Framework Metasploit Community Metasploit Express Metasploit Pro Pricing ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q133-Q135)
Question 133You create a Web Part that updates a list.You need to ensure that users can use the Web ...