Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Stwórz obszar pami ę ci dzielonej, z którego b ę d ą korzystać trzy procesy. Zorganizuj
- dost ę p do tej pami ę ci tak, aby procesy mia ł y do niej dost ę p w ś ci ś le okre ś lonej kolej-
- no ś ci. Postaraj si ę nie u ż ywa ć semaforów.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/ipc.h>
- #include <sys/types.h>
- #include <sys/shm.h>
- #include <unistd.h>
- #include <wait.h>
- int main(void)
- {
- pid_t pid;
- int shmid;
- int *shared_memory;
- if((shmid = shmget(IPC_PRIVATE, SHMLBA, 0775 | IPC_CREAT | IPC_EXCL)) == -1){
- perror("shmget");
- return EXIT_FAILURE;
- }
- if((shared_memory = shmat(shmid, NULL, 0)) == (int *)-1){
- perror("shmat");
- return EXIT_FAILURE;
- }
- for(int i = 1; i <= 3; i++){
- pid = fork();
- if(pid == -1){
- perror("fork");
- return EXIT_FAILURE;
- }
- else if(pid == 0){
- printf("Proces %d: dodano liczbe \"%d\" do pamieci dzielonej\n", i, i);
- shared_memory[i] = i;
- return EXIT_SUCCESS;
- }
- else
- sleep(1);
- }
- wait(0);
- printf("Liczby w pamieci dzielonej: ");
- for(int j = 0; j < 3; j++)
- printf("%d ", shared_memory[j]);
- printf("\n");
- if(shmdt(shared_memory) == -1){
- perror("shmdt");
- return EXIT_FAILURE;
- }
- if(shmctl(shmid, 0, IPC_RMID) == -1){
- perror("shmctl");
- return EXIT_FAILURE;
- }
- return EXIT_SUCCESS;
- }
Add Comment
Please, Sign In to add comment