【问题标题】:Reading multiple messages using pipe in C?在C中使用管道读取多条消息?
【发布时间】:2014-03-02 01:09:54
【问题描述】:

我知道我可以使用管道从父进程发送消息并使用 read() 从子进程接收它,但是如果我想向子进程发送多个不同类型(int、数组..)的消息怎么办?是否可以让子进程分别读取?

【问题讨论】:

    标签: c file process fork pipe


    【解决方案1】:

    您可以在enum 中定义各种data types,然后在message 的开头附加此enum

    typedef enum 
    {
    INT,
    CHAR,
    FLOAT,
    LONG
    //other data types
    } data_type_t;
    

    说,你的信息是:

    stackoverflow
    

    并且您需要指示接收者将其作为字符串读取,因此您可以像这样附加它:

    1stackoverflow //here 1 indicates CHAR
    

    因此,如果孩子阅读它,它可以提取第一个字符以查看它必须被解释为字符串 (CHAR)。将其用作:

    #define READ 0 /* Read end of pipe */
    #define WRITE 1 /* Write end of pipe */
    . . .
    
    int fd[2];
    char *message = "some random message";
    char modified_message[40];
    
    data_type_t type = CHAR; // Say for this message you define the data type as char
    
    sprintf(modified_message, "%d%s", type,  message);
    write(fd[WRITE], message, strlen(message)+1);
    . . .
    

    接收端将提取message 的第一个位并知道1st 位,您将能够解释所包含数据的类型。

    【讨论】:

    • 谢谢,如果消息的大小未知并且可能超过一位怎么办?
    • 可以发送的消息的大小必须有一个上限,如果它低于该限制并以空值终止,strlen 将计算它。
    猜你喜欢
    • 2019-02-23
    • 2020-03-27
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2016-03-19
    相关资源
    最近更新 更多