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;
    }
  • 相关阅读:
    关于HashMap的线程安全问题
    Java利器之UML类图详解
    mongoDB4.0数据库
    requests-html库render的使用
    爬虫最新的库requests-html库总结
    爬虫多次爬取时候cookie的存储用于登入
    requests模块响应体属性和方法重新整理
    Visual Studio 代码补全功能有时候会失效的原因
    C++Primer笔记——文本查询程序(原创,未使用类)
    Clion 常用快捷键
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6202362.html
Copyright © 2011-2022 走看看