我需要通过管道传递这个结构:
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使用write)
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;
}
答案 0 :(得分:0)
Student结构只包含指针,因此您不能一次发送整个结构。如果你有修复数组而不是动态分配数组,那就有可能。
示例:
struct Student {
char name[32];
char average[16];
};
我想这可能会回答你的问题: