2016-05-14 64 views
1

我需要通過管道來傳遞這個結構:傳遞在C整體結構通過管道

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; 

我的問題是,我不知道怎麼寫的學生結​​構以及如何讀取它。我可以正確讀取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; 
} 

回答

1

學生結構只包含指針,所以你不能一次發送整個結構。如果你修正了數組而不是動態分配數組,那將是可能的。

例如:

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

我想這可能會回答你的問題:

C - serialization techniques