Jestem w trakcie pisanie programu na Systemy Operacyjne. Dodam, że muszę to robić na linuxie w C.
Więc.... Program d1 po otrzymaniu sygnału powinien zapisać w łączu nazwanym wiadomość i wysłać inny sygnał do programu d2. Gdy d2 otrzyma sygnał powinien odczytać wiadomość i jeśli odczytana wiadomość jest równa czemuś konkretnemu ma np. wyświetlić jakiś komunikat. Problem polega na tym, że coś jest nie tak w programie d1, tak jakby po otwarciu łącza nic się dalej nie dzieje.
Z góry dziękuję za jakiekolwiek wskazówki.
Program d1:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <signal.h>
void fun(int siq)
{
int fh,n=2;
char *fifo = "/tmp/fifo";
char tab[n];
tab[0]='1';
mkfifo(fifo, 0666);
if((fh = open(fifo, O_WRONLY))<0)
{
printf("Blad\n");
exit(1);
}
write(fh, tab, n);
close(fh);
system("killall -SIGUSR1 d2");
}
int main()
{
while(1)
{
signal(SIGINT,fun);
}
return 0;
}
Program d2:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <signal.h>
void fun(int sig)
{
int fh,n=2;
char *fifo = "/tmp/fifo";
char tab[n];
int i;
if((fh = open(fifo, O_RDONLY))<0)
{
printf("Blad\n");
exit(1);
}
read(fh, tab, n);
close(fh);
if( tab[0]=='1') printf("jest rowne\n");
else printf("nie jest rowne\n");
unlink(jawny);
}
int main()
{
while(1)
{
signal(SIGUSR1, fun);
}
return 0;
}
Oba programy są wywoływane w programie inicjującym przez execlp() w procesach utworzonych funkcją fork().
alagner#include
, header to po ang. nagłówek, czyli mowa o pliku nagłówkowym.