【发布时间】:2014-03-02 01:09:54
【问题描述】:
我知道我可以使用管道从父进程发送消息并使用 read() 从子进程接收它,但是如果我想向子进程发送多个不同类型(int、数组..)的消息怎么办?是否可以让子进程分别读取?
【问题讨论】:
我知道我可以使用管道从父进程发送消息并使用 read() 从子进程接收它,但是如果我想向子进程发送多个不同类型(int、数组..)的消息怎么办?是否可以让子进程分别读取?
【问题讨论】:
您可以在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 位,您将能够解释所包含数据的类型。
【讨论】: