Я пытаюсь отправить файл usr / share / dict / words (размером около 971 КБ) из родительского процесса в два дочерних процесса через именованные каналы. Однако вывод пуст, и я не получил никаких ошибок. Я ждал минуту, но ничего не изменилось. Программа отлично работает с 10 КБ данных, которые я пробовал. Я знаю, что размер конвейерного буфера составляет 64 КБ, но кто-то может объяснить, что не так с моим подходом:
Здесь в коде: - ptr_child_1 относится к указателю общей памяти, 1 МБ сопоставленного сегмента сопоставлено. - fd и sd - каналы, файл - указатель файла
Код длинный, поэтому я не вставил все из них. Мне просто интересно, как мне отправить этот большой файл
Родительская запись:
mknod(FIFO_1, S_IFIFO | 0666, 0);
mknod(FIFO_2, S_IFIFO | 0666, 0);
// open pipes
int fd = open(FIFO_1, O_WRONLY);
int sd = open(FIFO_2, O_WRONLY);
char str[3000];
while(fgets(str, sizeof(str), file) > 0)
{
// write all lines of file
write(fd, str, strlen(str));
write(sd, str, strlen(str));
}
// send EOF explicitly
write(fd, "\0", 1);
write(sd, "\0", 1);
// close file and pipes
close(fd);
close(sd);
fclose(file);
Дочерняя запись:
int num;
char s[3000];
while((num = read(fd, s, sizeof(s))) > 0)
{
sprintf(ptr_child_1, "%s", s);
ptr_child_1 += num;
}
// close pipe
close(fd);