KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am working on implementing a database server in C that will handle requests from multiple clients. I am using fork() to handle connections for individual clients. The server stores data in the heap, which consists of a root pointer to hash tables of dynamically allocated records. The records are structs that have pointers to various data-types. I would like for the processes to be able to share this data so that, when a client makes a change to the heap, the changes will be visible for the other clients. I have learned that fork() uses COW (Copy On Write) , and my understanding is that it copies the heap (and stack) memory of the parent process when the child tries to modify the data in memory. I have found out that I can use the shm library to share memory. Would the code below be a valid way to share heap memory (in shared_string)? If a child were to use similar code (i.e. starting from //start), would other children be able to read/write to it while the child is running and after it's dead? key_t key; int shmid; key = ftok("/tmp",'R'); shmid = shmget(key, 1024, 0644 | IPC_CREAT); //start char * string; string = malloc(sizeof(char) * 10); strcpy(string, "a string"); char * shared_string; shared_string = shmat(shmid, string, 0); strcpy(shared_string, string); Here are some of my thoughts/concerns regarding this: I'm thinking about sharing the root pointer of the database. I'm not sure if that would work or if I have to mark all allocated memory as shared. I'm not sure if the parent / other children are able to access memory allocated by a child. I'm not sure if a child's allocated memory stays on the heap after it is killed, or if that memory is released.
Tags (comma-separated)
Save Edits
Cancel