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;