zoukankan      html  css  js  c++  java
  • Linux 进程间通讯详解六

    ftok()函数
    key_t ftok(const char *pathname, int proj_id);
    --功能:创建系统建立IPC通讯 (消息队列、信号量和共享内存) 时key值
    --参数
        pathname    路径名
        proj_id     是一个子序列号,虽然是Int类型,但是只使用了8bit,大小是1-255,proj_id是一个非零值
    --成功返回key值,失败返回-1,并且设置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 !
    ");
            return -1;
        }
        key_t key = ftok(pvalue, 1);
        if (key == -1)
        {
            perror("ftok() err");
            return -1;
        }
        int msqid = msgget(key, 0666 | IPC_CREAT | IPC_EXCL);
        if (msqid == -1)
        {
            //该消息队列已经存在
            if (errno == EEXIST)
            {
                printf("消息队列已经存在!
    ");
                //访问消息队列
                msqid = msgget(key, 0666);
            } else
            {
                perror("msgget() err");
                return -1;
            }
        }
        printf("访问消息队列成功!msqid=%d
    ", msqid);
        return 0;
    }
  • 相关阅读:
    intellij idea tomcat 启动不生成war包
    php中的Trait的使用方法
    c++ 命名的强制类型转换
    【递归与动态规划】正则表达式匹配
    c程序设计语言 by K&R(四)输入与输出
    c程序设计语言 by K&R(三)结构
    深入理解c语言指针与内存
    c程序设计语言 by K&R(一)一些c语言基础知识
    c程序设计语言 by K&R(二)指针与数组
    第一次在这里
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6202362.html
Copyright © 2011-2022 走看看