Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <sys/wait.h>
  6. #include <fcntl.h>
  7. #include <sys/mman.h>
  8.  
  9. void
  10. generate_progression(int *a, int a0, int d, int n)
  11. {
  12. for (int i = 0; i < n; i++) {
  13. a[i] = a0 + i*d;
  14. }
  15. }
  16.  
  17. int
  18. main(int argc, const char * argv[])
  19. {
  20. int n = atoi(argv[1]);
  21. int a0 = atoi(argv[3]);
  22. int d = atoi(argv[4]);
  23. int k = atoi(argv[5]);
  24. int *addr;
  25. int *a;
  26. a = calloc(n*k, sizeof(a));
  27. int fd;
  28. fd = open(argv[2], O_WRONLY | O_CREAT | O_APPEND, 0666);
  29. generate_progression(a, a0, d, k*n);
  30. addr = mmap(NULL, k*n*sizeof(k), PROT_WRITE | PROT_READ, MAP_ANON | MAP_SHARED, -1, 0);
  31. for (int i = 0; i < n; i++) {
  32. if (!fork()) {
  33. for (int j = 0; j < k; j++) {
  34. lseek(*addr, i*sizeof(i)+j*n*sizeof(j), SEEK_SET);
  35. write(*addr, &a[i+j*n], sizeof(a[i+j*n]));
  36. }
  37. exit(1);
  38. }
  39. wait(0);
  40. }
  41. wait(0);
  42. munmap(addr, k*n*sizeof(k));
  43. for (int i = 0; i < n*k*sizeof(n); i++) {
  44. write(fd, &addr[i], sizeof(char));
  45. }
  46. close(fd);
  47. return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement