I was working on a simple example of IPC using the approach of Shared memory in C. And I have test it in the linux environment. It turned out that there could be some syntax problems with the code. I am not familiar with C programming language, and could not pinpoint the error of the code. Please help me. Any help would be appreciated. Thanks a lot. By the way, the error I got is near at the line containing main(). At least, that's what the compiler told me.
Server.c
Code:#include <sys/types.h> #include <sys/shm.h> #include <sys/stat.h> #include <stdio.h> #include <curses.h> #include <string.h> #include <stdlib.h> #include <data.h> int main() { //shared memroy segment ID int segment_id; //shared memory buffer Message* buffer; //Allocate a shared memory segment segment_id = shmget(IPC_PRIVATE, sizeof(*buffer), S_IRUSR | S_IWUSR); //Attach the shared memory segment buffer = (Message*) shmat(segment_id, NULL, 0); //print the shared memory segment id on the screen print("Shared memory segment ID is %d\n", segment_id); while (true) { for(; ; ) { sleep(100); if(buffer->ID==0) break; } //process the message sent by the client //Reverse the message string sent by the client char* strpt = strrev(buffer->str); //sent back the result to the client buffer->str == strpt; buffer->ID = 1; if(buffer->ID==-1) { //Detach the shared memory segment shmdt(buffer); //Remove the shared memory segment shmctl(segment_id, IPC_RMID, NULL); break; } } return 0; } //Function to reverse a string char* strrev(char* str) { int length = strlen(str); char* result = malloc(length + 1); if( result != NULL ) { result[length] = '\0'; for ( int i = length - 1, int j=0; i >= 0; i--, j++ ) result[j] = string[i]; } return result; }
client
Code:#include <sys/types.h> #include <sys/shm.h> #include <sys/stat.h> #include <stdio.h> #include <curses.h> #include <string.h> #include <stdlib.h> #include <data.h> int main( ){ //shared memory segment ID int segment_id; //shared memory buffer Message * buffer; //Manual selection of segment ID printf("Enter the shared memroy segment ID: "); scanf("%d", &segment_id); //Attach the shared memory segment buffer = ( Message* ) shmat(segment_id, NULL, 0); //Enter the Message to be sent to the client while(true) { printf("Enter the message you want to swap: "); gets(buffer->str); buffer->ID = 0; while(true) { //wait for the server to process the messa sleep(100); if(buffer->ID==1) break; } //display the message replied by the server printf("The server reply: %s\n", buffer->str); //Manual selection of quit the connection and exit printf("Do you want to continue? Press Y to continue, N to exit."); char* command; gets(command); if(command=="N"|| command=="n") break; } //Notify the server to close the connection buffer->ID = -1; //Detach the shared memory segment shmdt(buffer); return 0; }
The Message is simply a struct
Code:struct Mystruct { /*Message status: 1-processed by the server. 0-not processed by the server. -1-notify the server to close the connection. */ int ID; //string to store the message string char str[255]; }Message;



LinkBack URL
About LinkBacks



