Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <fcntl.h>
- #include <sys/mman.h>
- void
- generate_progression(int *a, int a0, int d, int n)
- {
- for (int i = 0; i < n; i++) {
- a[i] = a0 + i*d;
- }
- }
- int
- main(int argc, const char * argv[])
- {
- int n = atoi(argv[1]);
- int a0 = atoi(argv[3]);
- int d = atoi(argv[4]);
- int k = atoi(argv[5]);
- int *addr;
- int *a;
- a = calloc(n*k, sizeof(a));
- int fd;
- fd = open(argv[2], O_WRONLY | O_CREAT | O_APPEND, 0666);
- generate_progression(a, a0, d, k*n);
- addr = mmap(NULL, k*n*sizeof(k), PROT_WRITE | PROT_READ, MAP_ANON | MAP_SHARED, -1, 0);
- for (int i = 0; i < n; i++) {
- if (!fork()) {
- for (int j = 0; j < k; j++) {
- lseek(*addr, i*sizeof(i)+j*n*sizeof(j), SEEK_SET);
- write(*addr, &a[i+j*n], sizeof(a[i+j*n]));
- }
- exit(1);
- }
- wait(0);
- }
- wait(0);
- munmap(addr, k*n*sizeof(k));
- for (int i = 0; i < n*k*sizeof(n); i++) {
- write(fd, &addr[i], sizeof(char));
- }
- close(fd);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement