Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/sem.h>
- #include <sys/shm.h>
- #include <string.h>
- #include <unistd.h>
- #include <wait.h>
- #include <sys/ipc.h>
- void writer(int shmid)
- {
- char *str = shmat(shmid, NULL, 0);
- if(str == (void*)-1)
- perror("writer shmat");
- strncpy(str, "Systemy Operacyjne 1", 50);
- if(shmdt(str) < 0)
- perror("writer strdt");
- exit(0);
- }
- void reader(int shmid)
- {
- char *str = shmat(shmid, NULL, 0);
- if(str == (void*)-1)
- perror("reader shmat");
- printf("Odczytana wiadomosc: %s\n", str);
- if(shmdt(str) < 0)
- perror("reader strdt");
- if(wait(NULL) < 0)
- perror("wait");
- }
- int main(void)
- {
- int shmid = shmget(IPC_PRIVATE, 4096, 0600 | IPC_CREAT | IPC_EXCL);
- if(shmid < 0)
- perror("shmget");
- int pid = fork();
- if(pid < 0)
- perror("fork");
- if(pid == 0){
- sleep(1);
- puts("Proces 2");
- writer(shmid);
- }
- else{
- int pid1 = fork();
- if(pid1 < 0)
- perror("fork1");
- if(pid1 == 0){
- puts("Proces 1");
- writer(shmid);
- }
- else{
- sleep(2);
- puts("Proces 3");
- reader(shmid);
- }}
- if(shmctl(shmid, IPC_RMID, NULL) < 0)
- perror("shmctl");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement