• 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

  • 相关阅读:
    .ascx和.ashx文件说明
    零基础学习JavaScript(1)1.2JavaScript功能简介
    零基础学习JavaScript(1)1.1什么是JavaScript
    小实验3:实现haproxy的增、删、查
    小实验2:三级菜单
    python enumerate
    小实验1:购物车记录
    对西部数据硬盘自带的加密进行修改密码和取消密码保护
    CloudFoundry忘记密码?
    获取网页上没有下载链接的视频音频资源
  • 原文地址:https://www.cnblogs.com/bluebbc/p/2691717.html
Copyright © 2020-2023  润新知