gpt4 book ai didi

c - 通过管道传递 c 中的整个结构

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:11 26 4
gpt4 key购买 nike

我需要通过管道传递这个结构:

typedef struct Student {
char * name;
char * average;
} Student;

typedef struct Connection {
int fd;
int dataSize;
void * data;
} Connection;

typedef struct Request {
int action;
Connection * connection;
} Request;

我的问题是我不知道如何编写 Student 结构以及如何读取它。我可以正确读取 fd、action 和 dataSize,但我无法修复它的结构。我希望你可以帮助我。也许有一种更简单的方法来执行此操作并传递整个请求结构。

所以我在客户端做了这个:(writeNamedPipe 使用写)

requestState writeRequest(Request * request, int fd) {
writeNamedPipe(fd, &request -> action, sizeof(int));
writeNamedPipe(fd, &request -> connection -> fd, sizeof(int));
writeNamedPipe(fd, &request -> connection -> dataSize, sizeof(int));
writeNamedPipe(fd, &request -> connection -> data, request -> connection -> dataSize);
return REQUEST_OK;
}

这是在服务器端:

Request * getRequest(Connection * connection) {
Request *request;
int action, fd = 0;
int dataSize;
void * data;
read(connection-> fd, &action, sizeof(int));
read(connection-> fd, &fd, sizeof(int));
read(connection-> fd, &dataSize, sizeof(int));
data = malloc (dataSize);
read(connection-> fd, data, dataSize);
request = createRequest(action, fd, dataSize, data);
return request;
}

最佳答案

Student 结构仅包含指针,因此您不能一次发送整个结构。如果您有固定数组而不是动态分配的数组,那将是可能的。

例子:

struct Student {
char name[32];
char average[16];
};

我想这可能会回答您的问题:

C - serialization techniques

关于c - 通过管道传递 c 中的整个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com