zoukankan      html  css  js  c++  java
  • linux消息队列例子(msgsnd msgget)

    【snd.c】

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <errno.h>
    #include <unistd.h>
    #include <sys/msg.h>
    #define MAX_TEXT 512
    struct my_msg_st {
    long int my_msg_type;
    char some_text[MAX_TEXT];
    };
    int main()
    {
    int i = 10;
    int running = 1;
    struct my_msg_st some_data;
    int msgid;
    char buffer[BUFSIZ];
    msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
    if (msgid == -1) {
    fprintf(stderr, "msgget failed with error: %d\n", errno);
    exit(EXIT_FAILURE);
    }
    while(running) {
    printf("Enter some text: %d", BUFSIZ);
    fgets(buffer, BUFSIZ, stdin);
    some_data.my_msg_type = i--;
    strcpy(some_data.some_text, buffer);

    if (msgsnd(msgid, (void *)&some_data, MAX_TEXT, 0) == -1) {
    fprintf(stderr, "msgsnd failed\n");
    exit(EXIT_FAILURE);
    }
    if (strncmp(buffer, "end", 3) == 0) {
    running = 0;
    }
    }
    exit(EXIT_SUCCESS);
    }

    【rcv.c】

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <errno.h>
    #include <unistd.h>
    #include <sys/msg.h>
    struct my_msg_st {
    long int my_msg_type;
    char some_text[BUFSIZ];
    };

    int main()
    {
    int running = 1;
    int msgid;
    struct my_msg_st some_data;

    long int msg_to_receive = -8; //?ó??D
    msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
    if (msgid == -1) {
    fprintf(stderr, "msgget failed with error: %d\n", errno);
    exit(EXIT_FAILURE);
    }

    while(running) {
    if (msgrcv(msgid, (void *)&some_data, BUFSIZ,
    msg_to_receive, 0) == -1) {
    fprintf(stderr, "msgrcv failed with error: %d\n", errno);
    exit(EXIT_FAILURE);
    }
    printf("You wrote: %s", some_data.some_text);
    if (strncmp(some_data.some_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);
    }

    【Makefile】

    # Makefile

    all: snd rcv

    snd:snd.c
    gcc -o $@ snd.c

    rcv:rcv.c
    gcc -o $@ rcv.c

    clean:
    rm snd rcv

  • 相关阅读:
    从搭eclipse环境到导入maven工程
    基于jquery的多选下拉列框再次更改样式和交互
    BootStrap的typeahead使用过程中遇到的问题
    Vue webapp项目通过HBulider打包原生APP
    微信相机
    前端小新手,记录项目中不懂的问题
    判断pdf、word文档、图片等文件类型(格式)、大小的简便方法
    JavaScript学习笔记(一)——Map、Set与iterable
    oracle nvl函数
    mybaits中主键自动生成并返回主键
  • 原文地址:https://www.cnblogs.com/bluebbc/p/2691717.html
Copyright © 2011-2022 走看看