Формат вывода именованного канала (mkfifo)

Я использую именованный канал, чтобы читатель и писатель могли общаться. Текст, который я перемещаю, состоит из массива строк text [lines], и каждая строка состоит из 4 слов (или цифр), разделенных пробелом. Читатель это:

string temptext1[lines];

int bufs = 1024;
char tempchar1[bufs];
for (int l = 0; l < lines; l++)
{
ssize_t chars1 = read(rfd1, tempchar1, bufs);
if (chars1 > 0)
    temptext1[l].assign(tempchar1, chars1);
tempchar1[0] = '\0';
}

И писатель

wfd = open(fifoname.c_str(), O_WRONLY);
for (int p = 0; p < lines; p++)
{
    write(wfd, text[p].c_str(), text[p].length());
}
close(wfd);

Однако вывод писателя не всегда одинаков. Иногда он пропускает смену строки, и поэтому выход приходит в блоках. Некоторые из них, как и предполагалось, а другие изменяют строку только при достижении размера буфера. Пример:

1197332 Hunter Steven 62926191228732 Watkins Wanda 49260191248845 Raynor Martha 65254191251116 Chang Maurice 47853191265074 Cunningham Wesley 30632191273625 Vaughn Alicia 66399191277060 Doyle Kate 48450191289231 Patrick Eva 17533191291543 Hinson Sylvia 46649191311074 Fink Theodore 50564191321632 Stark Grace 64052191343213 Cooper Kristen 69265191357025 Bernstein Scott 22360191371284 Wall Erica 26280191372274 Knox Jill 44535191402568 Cox Claudia 27013191415579 Duke Gayle 39376191427406 Stein Evan 56028191442007 Barker Justin 15260191442433 Gross Robert 23075
191456852 McCall Nelson 3580
191471786 Lassiter Steven 13812
191475523 Hayes Warren 38732
191478103 Spencer Christine 46819
191516369 Skinner Lisa 51427
191522499 O'Connor Nicholas 66851

Если я распечатаю содержимое массива в файле:

ofstream outofs("Taksinomimena3.txt", ios::app);
if (!outofs.is_open())
    return 1;
for (int p = 0; p < lines; p++)
    outofs << text[p] << "\n";
outofs.close();

все напечатано как положено.

0 ответов

Другие вопросы по тегам