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

时间:2016-05-14 20:36:46

标签: c struct pipe

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

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;
}

1 个答案:

答案 0 :(得分:0)

Student结构只包含指针,因此您不能一次发送整个结构。如果你有修复数组而不是动态分配数组,那就有可能。

示例:

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

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

C - serialization techniques