Я написал простую пару программ для чтения-записи. Writer создает/открывает FIFO-файл и постоянно записывает в него строку. Читатель просто читает его и записывает на stdout. Читатель делает это только 10 раз, а затем завершает работу. Удивительно (для меня) писатель почти сразу же выходит. Он не просто выходит из пишущего цикла, он, кажется, выпрыгивает из него, я могу сказать это, не видя окончательного «bybyby» на экране. Я мог бы принять такое поведение, но я все еще не могу понять, почему. Разве кто-то может любезно поделиться со мной своими знаниями?Завершение чтения-процесса при закрытии FIFO-файла
/* writer code */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
char msg [] = "Leo_Tolstoy";
size_t len = strlen("Leo_Tolstoy");
if (mkfifo ("myfifo", 0600) != 0) {
perror ("creating fifo");
}
int fd;
if ((fd = open ("myfifo", O_WRONLY)) == -1) {
perror ("opening fifo");
exit (1);
}
while (1)
{
int r = write (fd, msg, len);
if (r == -1)
perror ("writing");
sleep(1);
}
printf ("byebye\n");
close (fd);
return 0;
}
/* reader code */
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/shm.h>
int main()
{
char buf[50];
printf ("bef opening\n");
int fd = open ("myfifo", O_RDONLY);
if (fd == -1) {
perror ("opening fifo");
exit (1);
}
printf ("bef reading\n");
int cnt=0;
while (cnt < 10)
{
int r = read (fd, buf, 50);
if (r == 0)
break;
if (r == -1)
perror ("reading");
write (1, buf, r);
cnt++;
}
// close (fd);
return 0;
}
Итак, C или C++. Я бы сказал, C, но это ваш звонок. Пожалуйста, выберите * один * язык, а не 2 (ваш вопрос, похоже, не относится к разным языкам). – Rakete1111
Нет языка C/C++, но два ** разных ** языка C и C++. Выберите ** один ** из них. – Olaf
Что говорит отладчик? – Olaf