[SOLVED][C] Łącza nienazwane, zadanie z komunikatami

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
40rozbojnik
Sędziwy Jeż
Sędziwy Jeż
Posty: 74
Rejestracja: 22 paź 2007, 20:35
Płeć: Mężczyzna
Wersja Ubuntu: 24.04
Środowisko graficzne: GNOME
Architektura: x86_64

[SOLVED][C] Łącza nienazwane, zadanie z komunikatami

Post autor: 40rozbojnik »

Witam, mam koszmarny problem, ponieważ z programowania w C jestem noga. Muszę roztrzaskać zadanie, które polega stworzeniu procesu macierzystego i potomnego, które komunikują się przez łącze nienazwane (skrypt w c, kompilowany przez gcc w shell'u). Wygląda to tak:
  • Wprowadzić przez wejście stdin komunikat (dane) do procesu macierzystego
  • Przez pipe komunikat (dane) ma być skopiowany do procesu potomnego
  • Na stdout ma być wyrzucony proces macierzysty i potomny
Obrazek

Bardzo proszę o pomoc chociaż w (jakiejkolwiek) części zadania, każda wskazówka się przyda :wall:

Dorwałem taki przykład:

Kod: Zaznacz cały

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
int fd1[2], fd2[2];
pid_t pid, ppid;
char bufor[10];
printf("Zglasza sie proces macierzysty.\n");
if (pipe(fd1) == -1)
{
perror("pipe");
}
else if (pipe(fd2) == -1)
{
perror("pipe");
}
if ((pid = fork()) == -1)
{
perror("fork");
}
if (pid == 0)
{
printf("Zglasza sie proces potomny.\n");
close(fd1[1]);
close(fd2[0]);
pid = getpid();
write(fd2[1], &pid, sizeof(pid));
read(fd1[0], &ppid, sizeof(pid));
printf("Proces potomny (%d): Identyfikator procesu macierzystego PPID = %d\n", pid, ppid);
}
else
{
close(fd1[0]);
close(fd2[1]);
ppid = getpid();
write(fd1[1], &ppid, sizeof(pid));
read(fd2[0], &pid, sizeof(pid));
printf("Proces macierzysty (%d): Identyfikator procesu potomnego PID = %d\n", ppid, pid);
}
return(0);
}
Tyle że nie wiem jak go przerobić, aby był on adekwatny do mojego zadania:wall:
Yakub
Piegowaty Guziec
Piegowaty Guziec
Posty: 12
Rejestracja: 29 lip 2006, 20:05
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: [SOLVED][C] Łącza nienazwane, zadanie z komunikatami

Post autor: Yakub »

Witam
Nie wiem czy dobrze zrozumiałem, ale udało mi się zrobić coś takiego

Kod: Zaznacz cały

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	int fd[2], pid, ppid, ppid1;
	pipe(fd);
	char buf[20] = "\0"; 
	char buf2[20];
	char naz[8] = "Nazwisko";
	char dane[20] = "\0";
	int index = 12345, index1;
	
	scanf("%s", dane);
	
	if(fork()==0) {//potomny
		close(fd[1]);
		pid = getpid();
		printf("pid: %d\n", pid);
		read(fd[0], &ppid1, sizeof(int));
		printf("ppid: %d\n", ppid1);
		read(fd[0], &index1, sizeof(int));
		printf("index: %d\n", index1);
		read(fd[0], &buf, 8);
		printf("nazwisko: %s\n", buf);
		read(fd[0], &buf2, 20);
		printf("dane: %s\n", buf2);
		
	}
	else {//macierzysty
		close(fd[0]);
		ppid = getpid();
		write(fd[1], &ppid, sizeof(int));
		write(fd[1], &index, sizeof(int));
		write(fd[1], &naz, 8);
		write(fd[1], &dane, 20);
		
		
	}
	return 0;
}
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości