adhed

Untitled

May 29th, 2015
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. #include <sys/wait.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <string.h>
  6. #define MAX_BUF 1024
  7.  
  8. int main(void) {
  9.  
  10. int pipefd[2]; // tablica która będzie przechowywać deskryptory plików
  11. pid_t cpid; // zmienna dla PID procesu
  12. char buf[MAX_BUF]; // tablica typu char dla bufora do odczytywania pliku
  13. char message[MAX_BUF];
  14. char znak; // zmienna dla znaku
  15.  
  16. /* utworzenie potoku bez nazwy i od razu sprawdzenie czy nie wystąpił błąd
  17. zapisanie w tablicy pipefd deskryptorow do czytania i do pisania */
  18. if(pipe(pipefd) == -1) {
  19. exit(-1);
  20. }
  21.  
  22. // utworzenie procesu potomnego i zapisanie wartosci wynikowej do zmiennej cpid
  23. cpid = fork();
  24.  
  25. // sprawdzenie wartosci zmiennej cpid - czy jesteśmy w procesie macierzystym czy potomny
  26. if (cpid == 0) {
  27. // jestesmy w procesie potomnym
  28.  
  29. // zamknięcie pliku do pisania
  30. close(pipefd[1]);
  31.  
  32. // czytanie pliku ktory jest do odczytu i zapisanie danych do bufora
  33. read(pipefd[0], buf, MAX_BUF);
  34.  
  35. // wyswietlenie wiadomości ze zmiennej buf - bufora
  36. printf("Odebrałem wiadomość: %s\n", buf);
  37.  
  38. // zamknięcie pliku do odczytu
  39. close(pipefd[0]);
  40.  
  41. strncpy(message, "Nie...nie... to nieprawda. To niemozliwe!", MAX_BUF);
  42.  
  43. write(pipefd[1], message, strlen(message));
  44. close(pipefd[1]);
  45.  
  46. // zakończenie procesu potomnego
  47. exit(0);
  48. } else {
  49. // jestesmy w procesie macierzystym
  50. // zamknięcie pliku do odczytu
  51. close(pipefd[0]);
  52. // zapisanie wiadomości do pliku do pisania
  53. write(pipefd[1], "Luke, to ja jestem twoim ojcem!", strlen("Luke, to ja jestem twoim ojcem!"));
  54. // zamknięcie pliku do pisania
  55. close(pipefd[1]);
  56. // czekanie na zakończenie procesu potomnego
  57. wait(NULL);
  58.  
  59. read(pipefd[0], buf, MAX_BUF);
  60. printf("Odebralem wiadomosc od potomka: %s\n", buf);
  61.  
  62. // zakończenie procesu macierzystego
  63. exit(0);
  64. }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment