Advertisement
Guest User

Untitled

a guest
Jan 18th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <fcntl.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <fcntl.h>
  6. #include <string.h>
  7. #include <sys/types.h>
  8. #include <sys/ipc.h>
  9. #include <semaphore.h>
  10. #include <sys/shm.h>
  11. #include <sys/msg.h>
  12. #define key 0x1112
  13.  
  14. struct msq_que
  15. {
  16. long msg_type;
  17. double buffer[6];
  18. }msg;
  19.  
  20. struct msq_que rec;
  21.  
  22. int main()
  23. {
  24. char nazwa[20];
  25. printf("Podaj nazwe pliku, z ktorego maja zostac odczytane liczby: ");
  26. scanf("%s", nazwa);
  27.  
  28. if(access(nazwa, F_OK) != -1)
  29. {
  30. printf("Plik istnieje.\n");
  31. if(access(nazwa, R_OK) != -1)
  32. {
  33. printf("Sa uprawnienia.\n");
  34. }
  35. else
  36. {
  37. printf("Brak uprawnien.\n");
  38. return 1;
  39. }
  40. }
  41. else
  42. {
  43. printf("Plik nie istnieje.\n");
  44. return 1;
  45. }
  46. FILE *fp;
  47. fprintf(stderr,"\na");
  48. //tworzenie kolejki
  49. //struct msq_que *msg;
  50. int msgid;
  51. fprintf(stderr,"\na");
  52. msgid = msgget(key, 0666 | IPC_CREAT);
  53. fprintf(stderr,"\na");
  54. msg.msg_type = 1;
  55. fprintf(stderr,"\na1");
  56. sleep(10);
  57. //procesy
  58. if(fork()==0)
  59. {
  60. int n=0;
  61. int a, i;
  62. double liczba;
  63. fprintf(stderr,"\na");
  64. fp = fopen(nazwa ,"r");
  65. a = fscanf(fp, "%lf", &liczba);
  66. fprintf(stderr,"\na");
  67. //msg.ilosc=n;
  68. //msg.polecenie=1;
  69. while(a != EOF)
  70. {
  71. msg.buffer[n]=liczba;
  72. n++;
  73. a = fscanf(fp, "%lf", &liczba);
  74. if(n == 6){
  75. //msg.ilosc=n;
  76. n = 0;
  77. msgsnd(msgid, &msg, sizeof(msg), 0);
  78.  
  79. for(i=0;i<6;i++)
  80. {
  81. fprintf(stderr,"\n%lf", msg.buffer[i]);
  82. }
  83. }
  84. }
  85. //msg.ilosc = n;
  86. msgsnd(msgid, &msg, sizeof(msg), 0);
  87. //msg.polecenie = 0;
  88. fclose(fp);
  89. return 0;
  90. }
  91.  
  92. if(fork()==0)
  93. {
  94. int i;
  95. int n = 0;
  96. int a;
  97. const char *plik="/home/bartar/LAB10/odp.txt";
  98. double suma=0.0;
  99. double srednia;
  100. double liczba;
  101. rec.msg_type=1;
  102. fprintf(stderr,"\na2");
  103. //msgrcv(msgid, &rec, sizeof(rec), 1, 0);
  104. msgrcv(msgid, &msg, sizeof(msg), 1, 0);
  105. for(i=0; i<6; i++)
  106. {
  107. liczba = msg.buffer[i];
  108. suma+=liczba;
  109. printf("%lf\n", liczba);
  110. n++;
  111. }
  112. if(n==0)
  113. {
  114. srednia = 0.0;
  115. }
  116. else
  117. {
  118. srednia=suma/n;
  119. }
  120. printf("Srednia: %lf\n", srednia);
  121. fp=fopen(plik, "w");
  122. fprintf(fp, "%lf", srednia);
  123. fclose(fp);
  124. return 0;
  125. }
  126. while(1)
  127. {
  128. }
  129. msgctl(msgid, IPC_RMID, NULL);
  130. return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement