在C中使用管道读取多条消息?

时间:2014-03-02 01:09:54

标签: c file process fork pipe

我知道我可以从父节点发送消息并使用来自使用管道的子节点的read()接收它,但是如果我想将多个不同类型的消息(int,array ..)发送到子进程呢?是否可以让子进程单独阅读它们?

1 个答案:

答案 0 :(得分:2)

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

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的第1位并知道1st位,您将能够解释所包含数据的类型。