Итак, я пытаюсь реализовать базовый конвейер FIFO в C, используя mkfifo(). Вот мои классы кода до сих пор:FIFO Pipelining Server получает только определенное количество
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;
}
Теперь трубопровод но по какой-то причине сервер получает только часть сообщения. Например, если мы получим следующую строку из протокола: «HELLO WORLD» Мы получаем следующий вывод:
Server receive: HELLO WO
Client send: HELLO WORLD
Сервер должен получить сообщение целиком, но это не так. Что я делаю не так? Спасибо за любую помощь!
В server.c, почему 'input = (char *) malloc (200 * sizeof (char)) ;, но затем' read (fd, input, MAX_BUF); 'когда' MAX_BUF' равно 1024? –
О, хорошо, я пытался различать вещи, и оба с этим MAX_BUF или с использованием sizeof (input) дали мне тот же результат. Думаю, я забыл изменить его на что-то непротиворечивое! ^^; – k1234