still working in shm
This commit is contained in:
parent
7fe01720af
commit
06c3b4e2ac
|
@ -3,6 +3,8 @@
|
||||||
"ostream": "cpp",
|
"ostream": "cpp",
|
||||||
"chrono": "cpp",
|
"chrono": "cpp",
|
||||||
"iostream": "cpp",
|
"iostream": "cpp",
|
||||||
"iosfwd": "cpp"
|
"iosfwd": "cpp",
|
||||||
|
"fstream": "cpp",
|
||||||
|
"xlocmes": "cpp"
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -15,4 +15,4 @@ run-coms: ./coms.out
|
||||||
clean:
|
clean:
|
||||||
rm a.out coms.out
|
rm a.out coms.out
|
||||||
|
|
||||||
.PHONY: run-coms
|
.PHONY: run-coms clean
|
|
@ -0,0 +1,260 @@
|
||||||
|
#include "important.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <chrono>
|
||||||
|
#include <fstream>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include<sys/mman.h>
|
||||||
|
#include<sys/stat.h>
|
||||||
|
#include<fcntl.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
|
// if(argc != 3)
|
||||||
|
// {
|
||||||
|
// cout << "usage: ./a.out <path-to-original-image> <path-to-transformed-image>\n\n";
|
||||||
|
// exit(0);
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// struct image_t *input_image = read_ppm_file(argv[1]);
|
||||||
|
// struct image_t *smoothened_image = S1_smoothen(input_image);
|
||||||
|
char buf;
|
||||||
|
pid_t CHILD;
|
||||||
|
|
||||||
|
|
||||||
|
CHILD = fork();
|
||||||
|
if (CHILD == -1) {
|
||||||
|
perror("fork failed!");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parent Process
|
||||||
|
if(CHILD != 0){
|
||||||
|
|
||||||
|
const char *name = "/parent-child";
|
||||||
|
int shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
|
||||||
|
if (shm_fd == -1) {
|
||||||
|
perror("shm_open");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the size of the shared memory region
|
||||||
|
// size_t size = smoothened_image->height * smoothened_image->width * 3;
|
||||||
|
size_t size = 1024;
|
||||||
|
|
||||||
|
// Resize the shared memory object to the desired size
|
||||||
|
if (ftruncate(shm_fd, size) == -1) {
|
||||||
|
perror("ftruncate");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Map the shared memory object into the process address space
|
||||||
|
void *ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
|
||||||
|
if (ptr == MAP_FAILED) {
|
||||||
|
perror("mmap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write data to the shared memory
|
||||||
|
sprintf((char *)ptr, "...PACKET...");
|
||||||
|
|
||||||
|
// Unmap the shared memory object
|
||||||
|
if (munmap(ptr, size) == -1) {
|
||||||
|
perror("munmap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the shared memory file descriptor
|
||||||
|
if (close(shm_fd) == -1) {
|
||||||
|
perror("close");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unlink the shared memory object
|
||||||
|
// if (shm_unlink(name) == -1) {
|
||||||
|
// perror("shm_unlink");
|
||||||
|
// return 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
printf("parent writing to shm\n");
|
||||||
|
wait(NULL); /* Wait for child */
|
||||||
|
}
|
||||||
|
|
||||||
|
// Child process
|
||||||
|
else if (CHILD == 0) { /* Child reads from pipe */
|
||||||
|
|
||||||
|
|
||||||
|
pid_t GRAND_CHILD = fork();
|
||||||
|
|
||||||
|
if (GRAND_CHILD == -1) {
|
||||||
|
perror("fork failed!");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Child Process
|
||||||
|
if(GRAND_CHILD != 0){
|
||||||
|
// close(pipe1[1]); /* Close unused write end for s1_s2 pipe */
|
||||||
|
// close(pipe2[0]); /* Close unused read end for s2_s3 pipe */
|
||||||
|
// char to_print[] = "C : x\n";
|
||||||
|
// while (read(pipe1[0], &buf, 1) > 0)
|
||||||
|
// {
|
||||||
|
// printf("child reading from pipe\n");
|
||||||
|
// to_print[4] = buf;
|
||||||
|
// write(STDOUT_FILENO, &to_print, strlen(to_print));
|
||||||
|
// }
|
||||||
|
|
||||||
|
printf("Child reading from shm...\n");
|
||||||
|
|
||||||
|
const char *name = "/parent-child";
|
||||||
|
int shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
|
||||||
|
if (shm_fd == -1) {
|
||||||
|
perror("shm_open");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the size of the shared memory region
|
||||||
|
size_t size = 1024;
|
||||||
|
|
||||||
|
// Resize the shared memory object to the desired size
|
||||||
|
if (ftruncate(shm_fd, size) == -1) {
|
||||||
|
perror("ftruncate");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Map the shared memory object into the process address space
|
||||||
|
void *ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
|
||||||
|
if (ptr == MAP_FAILED) {
|
||||||
|
perror("mmap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
// Print the contents of the shared memory
|
||||||
|
char *packet = (char *)ptr;
|
||||||
|
printf("Shared memory contents: %s\n", packet);
|
||||||
|
|
||||||
|
char buffer[1024];
|
||||||
|
strncpy(buffer, packet, 1024);
|
||||||
|
|
||||||
|
// Unmap the shared memory object
|
||||||
|
if (munmap(ptr, size) == -1) {
|
||||||
|
perror("munmap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the shared memory file descriptor
|
||||||
|
if (close(shm_fd) == -1) {
|
||||||
|
perror("close");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("child writing to shm\n");
|
||||||
|
|
||||||
|
const char *name2 = "/child-grandchild";
|
||||||
|
int shm2_fd = shm_open(name2, O_CREAT | O_RDWR, 0666);
|
||||||
|
if (shm2_fd == -1) {
|
||||||
|
perror("shm_open");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the size of the shared memory region
|
||||||
|
// size_t size = smoothened_image->height * smoothened_image->width * 3;
|
||||||
|
// size_t size = 1024;
|
||||||
|
|
||||||
|
// Resize the shared memory object to the desired size
|
||||||
|
if (ftruncate(shm2_fd, size) == -1) {
|
||||||
|
perror("ftruncate");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Map the shared memory object into the process address space
|
||||||
|
void *ptr2 = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shm2_fd, 0);
|
||||||
|
if (ptr2 == MAP_FAILED) {
|
||||||
|
perror("mmap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write data to the shared memory
|
||||||
|
sprintf((char *)ptr2, buffer, 1024);
|
||||||
|
|
||||||
|
// Unmap the shared memory object
|
||||||
|
if (munmap(ptr2, size) == -1) {
|
||||||
|
perror("munmap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the shared memory file descriptor
|
||||||
|
if (close(shm2_fd) == -1) {
|
||||||
|
perror("close");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wait(NULL);
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// GrandChild Process
|
||||||
|
else if (GRAND_CHILD == 0) { /* GrandChild reads from pipe */
|
||||||
|
|
||||||
|
printf("Grandchild reading from shm...\n");
|
||||||
|
|
||||||
|
const char *name = "/child-grandchild";
|
||||||
|
int shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
|
||||||
|
if (shm_fd == -1) {
|
||||||
|
perror("shm_open");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the size of the shared memory region
|
||||||
|
size_t size = 1024;
|
||||||
|
|
||||||
|
// Resize the shared memory object to the desired size
|
||||||
|
if (ftruncate(shm_fd, size) == -1) {
|
||||||
|
perror("ftruncate");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Map the shared memory object into the process address space
|
||||||
|
void *ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
|
||||||
|
if (ptr == MAP_FAILED) {
|
||||||
|
perror("mmap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
// Print the contents of the shared memory
|
||||||
|
printf("Shared memory contents: %s\n", (char *)ptr);
|
||||||
|
|
||||||
|
// Unmap the shared memory object
|
||||||
|
if (munmap(ptr, size) == -1) {
|
||||||
|
perror("munmap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the shared memory file descriptor
|
||||||
|
if (close(shm_fd) == -1) {
|
||||||
|
perror("close");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cout << "success" << endl;
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -29,7 +29,7 @@ int main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write data to the shared memory
|
// Write data to the shared memory
|
||||||
sprintf(ptr, "Hello, shared memory!");
|
sprintf((char *)ptr, "Hello, shared memory!");
|
||||||
|
|
||||||
// Unmap the shared memory object
|
// Unmap the shared memory object
|
||||||
if (munmap(ptr, size) == -1) {
|
if (munmap(ptr, size) == -1) {
|
||||||
|
|
Loading…
Reference in New Issue