pborawski

zad3_pipes

Oct 29th, 2012
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. #plik prog_zad3.c
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <sys/types.h>
  6. #include <sys/wait.h>
  7. #include "errno.h"
  8. char wiadomosc[] = "Wiadomość od procesu macierzystego, przekazana za pomocą łącza nienazwanego procesowi potomnemu, działającego jako osobny program wywołany z poziomu procesu potomnego!";
  9. int main()
  10. {
  11. int fd[2];
  12. char fd_deskrypt_jako_napis[10];
  13.  
  14. pipe (fd);
  15. int p=fork();
  16. if (p==0) {
  17. //proces potomny
  18. close (fd[1]);
  19. sprintf(fd_deskrypt_jako_napis, "%d", fd[0]);
  20. execl("./pipe_potomek3", "pipe_potomek3", fd_deskrypt_jako_napis, 0);
  21. printf("Błąd funkcji execl\n");
  22. } else if (p==-1){
  23. perror("Błąd funkcji fork");
  24. } else {
  25. //proc macierzysty
  26. close (fd[0]);
  27. write (fd[1], wiadomosc, sizeof(wiadomosc));
  28. close (fd[1]);
  29. if (wait (0) == -1) printf("Błąd funkcji wait = %d %s\n", errno,strerror(errno));
  30. exit (0);
  31. }
  32. }
  33.  
  34. #plik pipe_potomek3.c
  35. #include <stdlib.h>
  36. #include <stdio.h>
  37. #include <unistd.h>
  38. #include "err.h"
  39. #define BUFOR_ROZMIAR 1024 //1KB
  40.  
  41. int main (int argc, char *argv[])
  42. {
  43. printf (" %s: został uruchomiony\n ", argv[0]);
  44. int odczyt_deskryptora, bufor_dlugosc;
  45. char bufor_komunikaty [BUFOR_ROZMIAR];
  46.  
  47. if (argc != 2)
  48. printf("Użycie: %s <numer_fd>\n", argv[0]);
  49.  
  50.  
  51. odczyt_deskryptora = atoi(argv[1]);
  52. printf ("%s: czyta z deskryptora nr %d\n",argv[0],odczyt_deskryptora);
  53.  
  54. bufor_dlugosc = read (odczyt_deskryptora, bufor_komunikaty, BUFOR_ROZMIAR - 1);
  55.  
  56. /* Jeśli na końcu odczytanego komunikatu nie było 0, to je dopisujemy: */
  57.  
  58. bufor_komunikaty [bufor_dlugosc < BUFOR_ROZMIAR - 1 ? bufor_dlugosc : BUFOR_ROZMIAR - 1] = '\0';
  59.  
  60. if (bufor_dlugosc == 0)
  61. printf (" %s: funkcja read: nieoczekiwany koniec pliku, lub brak danych w łączu\n",argv[0]);
  62. else
  63. printf (" %s: Odczytano %d bajtów, treść wiadomości: \"%s\"\n", argv[0], bufor_dlugosc, bufor_komunikaty);
  64.  
  65. if (close (odczyt_deskryptora) == -1) {
  66. printf (" %s: ", argv[0]);
  67. perror ("Błąd przy zamknięciu łącza: funkcja close\n");
  68. }
  69. exit (0);
  70. }
Advertisement
Add Comment
Please, Sign In to add comment