Also versuche ich eine grundlegende FIFO-Pipeline in C mit mkfifo() zu implementieren. Hier sind meine Code Klassen so weit:FIFO-Pipelining-Server empfängt nur eine bestimmte Menge
main.c:
int main(int argc, char *argv[]) {
char *path = "/tmp/fifo";
pid_t pid;
setlinebuf(stdout);
unlink(path);
mkfifo(path, 0600);
pid = fork();
if (pid == 0) {
client(path);
} else {
server(path);
}
return(0);
}
client.c:
void client(char *path) {
char *input;
input = (char *)malloc(200 * sizeof(char));
read(STDIN_FILENO, input, 200);
struct Message message;
message = protocol(input); //protocol simply takes an input string and formats it
char number = message.server;
char* string;
string = message.string;
int fd;
fd = open(path, O_WRONLY);
write(fd, string, sizeof(string));
printf("Client send: %s\n", string);
close(fd);
return;
}
server.c:
void server(char *path) {
int fd;
char *input;
input = (char *)malloc(200 * sizeof(char));
fd = open(path, O_RDONLY);
read(fd, input, sizeof(input));
printf("Server receive: %s\n", input);
close(fd);
return;
}
Nun ist die Pipeline funktioniert, aber aus irgendeinem Grund empfängt der Server nur einen Teil der Nachricht. „HALLO WELT“ Wir erhalten die folgende Ausgabe:: Wenn wir zum Beispiel die folgenden Zeichenfolge aus dem Protokoll erhalten
Server receive: HELLO WO
Client send: HELLO WORLD
Der Server soll die gesamte Nachricht empfangen, aber es ist nicht. Was mache ich falsch? Danke für jede Hilfe!
In server.c, warum 'input = (char *) malloc (200 * sizeof (char));' aber dann 'lesen (fd, input, MAX_BUF);' wenn 'MAX_BUF' 1024 ist? –
Oh, ich habe verschiedene Dinge ausprobiert, und beide, die MAX_BUF oder sizeof (input) hatten, gaben mir die gleiche Ausgabe. Ich glaube, ich habe vergessen, es wieder in etwas Konsequentes zu verwandeln! ^^; – k1234