program klient serwer na kolejkach fifo

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
Dusty
Posty: 38
Rejestracja: 23 listopada 2007, 20:48
Lokalizacja: /dev/null

program klient serwer na kolejkach fifo

Post autor: Dusty »

Witam, mam do napisania 2 programiki klient serwer na kolejkach fifo. Napisalem cos takiego, ale nie dziala tak jak powinno. Jestem laikiem jesli chodzi o programowanie wiec prosze o porade bardziej doswiadczonego kolege. Chodzi o to ze klient odpalony z parametrem ktorym jest nazwa pliku (plikow jest kilka w tym samym katalogu co klient i serwer) ma sie skomunikowac z serwerem odpalonym w tle i serwer ten ma mu odczytac zawartosc pliku. Po czym klient odbiera od serwera dane i wyswietla na ekranie. Oprocz tego nie wiem dokladnie jak zrobic, zeby byla mozliwosc odpalenia wielu klientow miedzy czasie i zeby kazdy otrzymal odpowiedzi od serwera. Kody przedstawiam nizej i z gory dzieki za wszelkie podpowiedzi.
--- Server ---

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#define FILE_MODE (S_IRUSR | S_IWUSR)
#define SERWER_FIFO "/tmp/S_FIFO"
#define KLIENT_FIFO "/tmp/K_FIFO"
#define MAX 100


int main(void)
{
FILE *fp;
char buf_serw[MAX], buf_kl[MAX];
int ch, writefd, readfd;

mkfifo(SERWER_FIFO, FILE_MODE);
mkfifo(KLIENT_FIFO, FILE_MODE);

while(1)
{
fork();
readfd = open(KLIENT_FIFO, O_RDONLY);
read(readfd, buf_kl, MAX);
if ((fp = fopen(buf_kl, "r")) == NULL)
{
printf("Nie mozna otworzyc %s\n", buf_kl);
exit(1);
}
while((ch = getc(fp)) != EOF)
{
putc(ch, buf_serw);
}
fclose(fp);
wait();
close(readfd);
unlink(SERWER_FIFO);
}

return(0);
}
--- Klient ---

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#define FILE_MODE (S_IRUSR | S_IWUSR)
#define SERWER_FIFO "/tmp/S_FIFO"
#define KLIENT_FIFO "/tmp/K_FIFO"
#define MAX 100

int main(int argc, char *argv[])
{
FILE *fp;

char buf_kl[MAX], buf_serw[MAX];
int id, ch, writefd, readfd;

mkfifo(SERWER_FIFO, FILE_MODE);
mkfifo(KLIENT_FIFO, FILE_MODE);

writefd = open(SERWER_FIFO, O_WRONLY);
write(writefd, buf_kl, MAX);

id = getpid();
strcpy(buf_kl, argv[1]);

readfd = open(KLIENT_FIFO, O_RDONLY);
read(readfd, buf_serw, MAX);

sprintf("%s\n", buf_serw, id);

return(0);
}
Pozdrawiam.
ODPOWIEDZ