Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #plik prog_zad3.c
- #include <stdlib.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include "errno.h"
- 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!";
- int main()
- {
- int fd[2];
- char fd_deskrypt_jako_napis[10];
- pipe (fd);
- int p=fork();
- if (p==0) {
- //proces potomny
- close (fd[1]);
- sprintf(fd_deskrypt_jako_napis, "%d", fd[0]);
- execl("./pipe_potomek3", "pipe_potomek3", fd_deskrypt_jako_napis, 0);
- printf("Błąd funkcji execl\n");
- } else if (p==-1){
- perror("Błąd funkcji fork");
- } else {
- //proc macierzysty
- close (fd[0]);
- write (fd[1], wiadomosc, sizeof(wiadomosc));
- close (fd[1]);
- if (wait (0) == -1) printf("Błąd funkcji wait = %d %s\n", errno,strerror(errno));
- exit (0);
- }
- }
- #plik pipe_potomek3.c
- #include <stdlib.h>
- #include <stdio.h>
- #include <unistd.h>
- #include "err.h"
- #define BUFOR_ROZMIAR 1024 //1KB
- int main (int argc, char *argv[])
- {
- printf (" %s: został uruchomiony\n ", argv[0]);
- int odczyt_deskryptora, bufor_dlugosc;
- char bufor_komunikaty [BUFOR_ROZMIAR];
- if (argc != 2)
- printf("Użycie: %s <numer_fd>\n", argv[0]);
- odczyt_deskryptora = atoi(argv[1]);
- printf ("%s: czyta z deskryptora nr %d\n",argv[0],odczyt_deskryptora);
- bufor_dlugosc = read (odczyt_deskryptora, bufor_komunikaty, BUFOR_ROZMIAR - 1);
- /* Jeśli na końcu odczytanego komunikatu nie było 0, to je dopisujemy: */
- bufor_komunikaty [bufor_dlugosc < BUFOR_ROZMIAR - 1 ? bufor_dlugosc : BUFOR_ROZMIAR - 1] = '\0';
- if (bufor_dlugosc == 0)
- printf (" %s: funkcja read: nieoczekiwany koniec pliku, lub brak danych w łączu\n",argv[0]);
- else
- printf (" %s: Odczytano %d bajtów, treść wiadomości: \"%s\"\n", argv[0], bufor_dlugosc, bufor_komunikaty);
- if (close (odczyt_deskryptora) == -1) {
- printf (" %s: ", argv[0]);
- perror ("Błąd przy zamknięciu łącza: funkcja close\n");
- }
- exit (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment